我正在学习成为一名数据库管理员,在这样做的同时,我想学习更多关于优化查询的知识。大多数我都能弄明白,但我想知道为什么这两个查询有相同的执行计划,甚至用两种不同的方式编写。它们是基于adventureworks2012lt数据库的。
select productnumber, name, listprice 
from saleslt.product
where productnumber like 'bk-[a-q,s-z]%' and productnumber like '%-[0-9][0-9]'
SELECT ProductNumber, Name, ListPrice
FROM SalesLT.Product 
WHERE ProductNumber LIKE 'BK-[^R]%-[0-9][0-9]';我还不能上传照片,因为我的名气还不够高:
发布于 2015-08-16 11:05:27
假设您正在手动浏览产品目录,查找指定模式的product Number。产品不会按任何顺序排序。除了浏览所有的产品并逐个匹配之外,你还有什么选择?您在ProductNumber上没有索引。SQL Server别无选择,只能执行表扫描以查找匹配的行。
但是,如果向ProductNumber添加索引,会发生什么情况呢?无论如何,结果都是一样的。以%开头的模式不能使用索引。因此,您的第一个查询将跳转到索引中以BK开头的范围。你的第二个查询也是如此。
新人痴迷于让事情变得更有效率。随着时间的推移,您将学会把事情留给SQL Server处理。你应该只在事情变成问题的时候才去担心。唯一的例外是游标。如果您考虑使用游标来解决问题,那么90%的时间都是错误的方法。
https://stackoverflow.com/questions/32031202
复制相似问题