SQL Server 数据库动态索引查找原理——索引查找原理
所谓的动态索引查找就是SQL Server在执行语句的时候,才格式化查询条件,然后根据查询条件的不同自动的去匹配所有项,从而达到性能提升的目的。
假设我们执行如下SQL语句:
select * from [dbo].[Orders] where ShipPostalCode in('90110','01307');
我们来查看SQL执行计划,这里有两种方式。
方式一是直接在SQL语句前面输入如下脚步:
set showplan_text on
GO
方式二,查询——查询选项——高级
按F5执行SQL语句,运行结果如下所示。
文本内容如下:
|--Clustered Index Scan(OBJECT:([Northwind].[dbo].[Orders].[PK_Orders]), WHERE:([Northwind].[dbo].[Orders].[ShipPostalCode]=N'01307' OR [Northwind].[dbo].[Orders].[ShipPostalCode]=N'90110'))
点中工具栏的“包括实际的执行计划”按钮,可以查看执行计划如下图所示。
use Northwind
GO
DECLARE @p1 NVARCHAR(20),@p2 NVARCHAR(20)
SELECT @p1=N'90110', @p2=N'01307'
SELECT * FROM dbo.Orders WHERE ShipPostalCode IN(@p1,@p2)
查看执行计划其执行结果和之前的SQL语句一模一样。
|--Clustered Index Scan(OBJECT:([Northwind].[dbo].[Orders].[PK_Orders]), WHERE:([Northwind].[dbo].[Orders].[ShipPostalCode]=[@p2] OR [Northwind].[dbo].[Orders].[ShipPostalCode]=[@p1]))