我有一个生成below 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”是用户输入的按空格分隔的任何字符串。
我使用了性能监视器进行分析,并执行了所有似乎使之恶化的建议。
最佳答案
concat你的列来搜索这个concat;
where col3+col9+col10+col5 like '%search1%'
使用筛选器进行子查询,然后在该记录集的行上进行行号
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