当前位置:Gxlcms > 数据库问题 > SQL Server 查询优化器运行方式

SQL Server 查询优化器运行方式

时间:2021-07-01 10:21:17 帮助过:18人阅读

CREATE INDEX EmployeesName ON Employees(FirstName,LastName)
INCLUDE(HIREDATE) WITH(ONLINE=ON)
GO

SELECT FirstName,LastName,HireDate,EmployeeID 
FROM Employees
WHERE FirstName=‘Anne‘
技术分享图片

技术分享图片

当然也不尽然只要查询列存在索引覆盖就执行索引查找,这取决于扫描的内容的多少,所以对于索引的利用程度还取决获取内容的多少

来举个例子:

技术分享图片
CREATE INDEX NameIndex  ON person.contact(FirstName,LastName)
GO

SELECT * FROM Person.Contact
WHERE FirstName LIKE ‘K%‘

SELECT * FROM Person.Contact
WHERE FirstName LIKE ‘Y%‘
GO
技术分享图片

完全相同的查询语句,来看执行计划:

技术分享图片

完全相同的查询语句,产生的查询计划完全不同,一个是索引扫描,一个则是高效的索引查找。

这里我只告诉你:FirstName like ‘K%‘的有1255行;而FirstName like ‘Y%‘只有37行,其中

其实,关于这里的原因就是统计信息在作怪了。

所以,特定的T-SQL语句不一定生成特定的查询计划,同样特定的查询计划不一定是最优的方式,影响的它的因素很多:关于索引、关于硬件、关于表内容、关于统计信息等诸多因素影响。

SQL Server 查询优化器运行方式

标签:title   大于   img   字符串   价格   情况下   toolbar   作用   不同   

人气教程排行