Sql server 2005 若索引并没有应用到那个列上,为什么like查询通常比子字符串花费更多的时间
我尝试了以下两个Sql查询。我使用了AdventureWorks2005示例数据库Sql server 2005 若索引并没有应用到那个列上,为什么like查询通常比子字符串花费更多的时间,sql-server-2005,Sql Server 2005,我尝试了以下两个Sql查询。我使用了AdventureWorks2005示例数据库 /* Query #1 */ SELECT [SalesOrderID] ,[SalesOrderDetailID] ,[CarrierTrackingNumber] ,[OrderQty] ,[ProductID] ,[SpecialOfferID] ,[UnitPrice] ,[UnitPriceDiscount] ,[LineTotal] ,[rowguid] ,[
/* Query #1 */
SELECT [SalesOrderID]
,[SalesOrderDetailID]
,[CarrierTrackingNumber]
,[OrderQty]
,[ProductID]
,[SpecialOfferID]
,[UnitPrice]
,[UnitPriceDiscount]
,[LineTotal]
,[rowguid]
,[ModifiedDate]
FROM [AdventureWorks].[Sales].[SalesOrderDetail]
WHERE SUBSTRING([CarrierTrackingNumber],1,4) ='4911'
/* Query #2 */
SELECT [SalesOrderID]
,[SalesOrderDetailID]
,[CarrierTrackingNumber]
,[OrderQty]
,[ProductID]
,[SpecialOfferID]
,[UnitPrice]
,[UnitPriceDiscount]
,[LineTotal]
,[rowguid]
,[ModifiedDate]
FROM [AdventureWorks].[Sales].[SalesOrderDetail]
WHERE [CarrierTrackingNumber] LIKE '4911%'
我发现当CarrierTrackingNumber上没有索引时,1所花费的时间小于2。有人能告诉我这种行为吗?这是否意味着子字符串比非索引列快
然而,一旦我应用了索引,2就比1快得多,正如我们所知,like在索引列上工作得更快 查询#1是由于子字符串函数,因此索引无法帮助该查询。可能的答案:
子字符串计算和字符串相等比较比like模式匹配更快
针对索引字符串列的左侧类常量模式匹配优化为索引范围扫描,但没有针对前缀子字符串实现此类优化