根据定义(至少从我所看到的),可优化意味着查询能够让查询引擎优化查询使用的执行计划。我尝试查找答案,但似乎没有太多关于该主题的内容。所以问题是,什么使 SQL 查询可控制?任何文档将不胜感激。
引用:Sargable
最佳答案
使查询不可控制的最常见方法是在 where 子句的函数内包含一个字段:
SELECT ... FROM ...
WHERE Year(myDate) = 2008
SQL 优化器无法使用 myDate 上的索引,即使存在索引。从字面上看,它必须为表的每一行评估这个函数。更好用:
WHERE myDate >= '01-01-2008' AND myDate < '01-01-2009'
其他一些例子:
Bad: Select ... WHERE isNull(FullName,'Ed Jones') = 'Ed Jones'
Fixed: Select ... WHERE ((FullName = 'Ed Jones') OR (FullName IS NULL))
Bad: Select ... WHERE SUBSTRING(DealerName,4) = 'Ford'
Fixed: Select ... WHERE DealerName Like 'Ford%'
Bad: Select ... WHERE DateDiff(mm,OrderDate,GetDate()) >= 30
Fixed: Select ... WHERE OrderDate < DateAdd(mm,-30,GetDate())
关于sql-server - 是什么使得 SQL 语句可控制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/799584/