有没有办法加快下面这样的查询?我正在寻找需要对应用程序代码进行最小更改的选项。
SELECT *
FROM my_table
WHERE some_column like '%my string%'
ORDER BY some_column
导致大部分减速的表有250万条记录,查询需要10秒才能执行。 执行计划告诉99%的成本是索引扫描(NonClustered),这是可以理解的,因为LIKE和模式两边都有“%”。 如果最后只有“%”,则使用索引查找并立即执行查询。
所以我正在寻找类似的东西:
我可以使用MS SQL 2012或2014,两者都是标准版。
加分问题
这个相同的查询是否有可能在DB2数据库上执行不正常?应用程序最初使用的是db2,但已迁移到MS SQL。
答案 0 :(得分:0)
可能没有答案,但有一个原因。当您使用带有前导通配符的搜索字符串(例如'%string')时,您将强制优化器执行表扫描。
您可能想重新审视此主题中的一些建议。
祝你好运!答案 1 :(得分:-2)
我不确定此解决方案是否适合您,因为它会在数据库中存储更多数据。它也可能会增加更新/插入的时间,但无论如何它都是一个想法。太长时间没有评论,所以不要怪我!
some_column like 'my string%' or rev_some_column like REVERSE('%my string')
。您最好使用在查询之前启动的变量替换REVERSE('%my string')。我认为在这种情况下,两个人都喜欢使用索引。