我有一个生成以下 SQL 语句的应用程序。
select ROW_NUMBER() OVER (ORDER BY col1) SerialNo, col1, col2, col3, col4,
col5, col6, col7, col8
from tableA where (col3 like '%search1%' or col9 like '%search1%'or col10
like '%search1%'or col5 like '%search1%' )
order by col5
它最近变得如此缓慢(表有超过 600 万条记录)并且它已经耗尽了 CPU 的资源。关于如何优化这个查询有什么想法吗? “search1”是用户输入的任意字符串,用空格分隔。”
我使用性能监视器进行分析,并实现了所有似乎使情况恶化的建议。
最佳答案
连接您的列以对此连接进行搜索;
where col3+col9+col10+col5 like '%search1%'
使用过滤器创建子查询,然后在该记录集的行上执行 ROW_NUMBER
select ROW_NUMBER() OVER (ORDER BY col1) SerialNo, col1, col2, col3, col4,
col5, col6, col7, col8
from (select SerialNo,col1, col2, col3, col4,
col5, col6, col7, col8 from tableA where col3+col9+col10+col5 like '%search1%'
) as tfiltered
order by col5
关于sql-server - 优化sql脚本占用CPU资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46767994/