我正在创建 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/