MSSQL上StartsWith和EndsWith之间的性能问题

时间:2019-04-22 17:50:07

标签: sql-server tsql sql-like

我习惯于由EF自动生成的同一数据的两个不同条件,但是执行性能LIKE 'blah%'(以)开始时,只有一个不同的堆栈执行不到1秒,但是我何时尝试运行LIKE '%blah'(以)结束,运行非常缓慢-超过40秒。关于EF等导致的超时异常(我知道如何延长超时时间),但是我只需要知道有什么区别,以及如何防止性能因这种微小差异而变慢。

2 个答案:

答案 0 :(得分:1)

问题在于第二条语句的可持久性-基本上,该索引最终根本没有帮助,因为该索引不是为常量左侧的通配符搜索而设计的。想象一下,如果我要您给字典中以“ blah”开头的每个单词给我-这将非常容易,因为项目按字母顺序排序!另一方面,如果我要求您让每个包含“ blah”(但不一定以它开头)的单词为我,那么您将被困在每个单词的后面,并对它进行模式匹配。

您可能希望研究full text indexes,因为我认为它们更适合此类任务。

答案 1 :(得分:0)

我从here找到了解决EndsWith性能问题的解决方案。

CREATE INDEX rev_col_idx ON table (reverse(column) text_pattern_ops); -- is not required

SELECT * FROM table WHERE reverse(column) like reverse('%something')