项目有一个页面进行分页查询每页查询速度能达到恐怖的20秒,但是服务器性能不能增强,那就只能通过sql优化或者新增索引来进行数据的查询优化
WITH query AS (SELECT TOP 100 PERCENT ROW_NUMBER() OVER (order by rrrr.bDate desc ) as __row_number__, rrrr.*
from (
select aa.*,t1.checkDate from (
SELECT
xxx,xxxx,xxx
FROM a表 aaaa
LEFT JOIN b表 bbbb ON aaaa.aid= bbbb .aid
where aaaa.type in ('1','2'))aa
LEFT JOIN (
select ROW_NUMBER () OVER ( PARTITION BY aaid ORDER BY date DESC, cid DESC ) AS RNUM,
date ,aaid
from c表 cccc
where cccc.type in (1,2)
) t1 on t1.aaid= aa.aaid and t1.RNUM=1 )rrrr
where 1=1
and record.cRID > 0
order by rrrr.bDate desc ) SELECT * FROM query WHERE __row_number__ BETWEEN 1 AND 30 ORDER BY __row_number__
从sql上面我不知道要怎么优化,试了很多个方法,但是效果不大。
表与表之间通过的字段也有索引。
后面我通过SQL server的数据库可视软件 Microsoft SQL server management studio 进行了查询开销,发现是c表 的查询占据了70%的查询,因为我按照c表的查询进行了索引的新增
首先更加aaid 分组,然后在date倒序,和cid的倒序,最后再加上type的in
因此我写了一个索引:
create index [idx_c_ROW_NUMBER] on [c表]([aaid],[date] DESC,[cid] DESC,[type]);
插入了该索引后速度提高了4倍(在显示估计的执行计划中C表查询的开销从70%降到1%)。再往上的话我就暂时无能为力了,服务器性能配置,表结构优化这些。
ps。欢迎来交料学习,还有什么能进行数据库优化的方法