sql - 关于哪些操作索引效果不佳或未使用

标签 sql sql-server database tsql query-optimization

我正在创建 sql 查询,我在一本书中读到,当使用 NOT 运算符或 LIKE 运算符时,Indexes 不起作用。这句话是多么真实。如果该陈述为真,我们如何避免这种情况。应该如何进行查询来避免这些运算符来完成相同的工作。

sql server 中还有哪些索引被延迟的区域。

最佳答案

如果为列定义了一个索引,则在左侧使用通配符的语句不能使用索引:

WHERE column LIKE '%abc'
WHERE column LIKE '%abc%'

但是其中任何一个都可以使用索引:

WHERE column LIKE 'abc%'
WHERE column LIKE 'abc'

坦率地说,使用 LIKE 进行非常简单的文本搜索 - 如果您确实需要性能良好的文本搜索,请查看全文搜索 (FTS)。全文搜索有它自己的索引。

决定实际上取决于优化器使用哪个索引,但要确保索引不会用于在函数调用中包装列值。例如,这将不使用索引:

WHERE CHARINDEX(column, 'abc') > 0
WHERE CAST(column AS DATETIME) <= '2010-01-01'

您在任何地方操作表数据——尤其是更改数据类型——都会使索引变得无用,因为索引是未更改的值,并且无法与已更改的数据相关联。

关于sql - 关于哪些操作索引效果不佳或未使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3437866/

相关文章:

sql-server - SQL Server 案例/排序规则问题

sql - "IN"查询中值的数量限制

java - Spring Data 中的查询创建 - 动态 where 子句

c# - 将DataTable中的数据插入到数据库表中

sql - 按日期字段的月份排序记录

javascript - 如何通过javascript函数调用DAO方法?

MySQL建表

java - 从 Eclipse 更新 HSQLDB 表

php - 带/不带表特定引用的 MySQL 查询

sql-server - 在触发器中组合 INSERTED 和 DELETED 而不使用 JOIN