我有一个在SQL Statement下生成的应用程序。
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。有关如何优化此查询的任何想法? "搜索1"用户按空格分割的任何字符串。"
我已经使用性能监视器进行分析,并实施了所有似乎使其恶化的建议。
答案 0 :(得分:1)
Concat你的列来搜索这个concat;
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
答案 1 :(得分:1)
这就是:
我看到以下方法可以加快速度: