Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 若索引并没有应用到那个列上,为什么like查询通常比子字符串花费更多的时间_Sql Server 2005 - Fatal编程技术网

Sql server 2005 若索引并没有应用到那个列上,为什么like查询通常比子字符串花费更多的时间

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] ,[

我尝试了以下两个Sql查询。我使用了AdventureWorks2005示例数据库

/* 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模式匹配更快

针对索引字符串列的左侧类常量模式匹配优化为索引范围扫描,但没有针对前缀子字符串实现此类优化