sql-server - 是什么使得 SQL 语句可控制?

标签 sql-server performance

根据定义(至少从我所看到的),可优化意味着查询能够让查询引擎优化查询使用的执行计划。我尝试查找答案,但似乎没有太多关于该主题的内容。所以问题是,什么使 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/

相关文章:

java - 如何使用 JDBC 从存储过程中获取*所有内容*

performance - GPGPU(通用GPU)开发的优缺点是什么?

performance - vb6 中更快的字符串比较

java - 在进行基准测试时,ReadTime 在 HashMap 查找中意味着什么?

SQL 问题 - CASE WHEN

sql - 您可以在不删除服务器的情况下在 MS SQL server Management Studio 中查看链接服务器属性吗?

sql - 实现 CTE

sql - 为每一表行创建一个 json

Java:在不执行复制操作的情况下偏移字节[]

performance - 如何重构这个 Haskell 随机字节输出器?