SQL server 百万级别的数据 ROW_NUMBER () OVER 后取第一条数据,和别的表关联查询速度慢新增索引处理

本文介绍了一种通过增加索引来显著提高复杂SQL查询效率的方法。针对一个特定查询过程,作者详细展示了如何定位到瓶颈所在表,并创建合适的复合索引来降低查询开销。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目有一个页面进行分页查询每页查询速度能达到恐怖的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。欢迎来交料学习,还有什么能进行数据库优化的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值