首页 新闻 会员 周边 捐助

sqlserver加上索引查询反而变慢?

0
[待解决问题]

SELECT * FROM(SELECT ROW_NUMBER() OVER( ORDER BY AddTime DESC) RowNum,* FROM (SELECT o.PK_Guid,o.OrderStatus,o.AddTime FROM TOrder o WHERE o.IsDeleted=0 AND (o.Booker='c1026f0d-d7f4-4010-92f8-351e6705a25f' OR o.Pk_Guid in(SELECT OrderGuid FROM TrainOrderPassenger WHERE CustomerInfoGuid='c1026f0d-d7f4-4010-92f8-351e6705a25f')) and o.TripType = 0 ) y ) t WHERE RowNum>=1 AND RowNum<=10;
数据量100W左右,AddTime 有索引,查询时间10秒左右,去掉索引,毫秒级,或者OVER后面改成这样也是毫秒级:( ORDER BY AddTime DESC,OrderStatus)

问题补充:

还有一点,就是如果那个GUID对应的用户的订单数量越多,查询速度就越快

拖鞋王子的主页 拖鞋王子 | 初学一级 | 园豆:38
提问于:2024-08-15 09:02
< >
分享
所有回答(3)
0

AddTime字段有为空的情况?

echo_lovely | 园豆:1546 (小虾三级) | 2024-08-15 10:27

我以前遇到过,索引列有为空的情况,Oracle一万来条查了十来秒

支持(0) 反对(0) echo_lovely | 园豆:1546 (小虾三级) | 2024-08-15 10:28
0

1、耗时10秒,开销主要在哪里
2、是否走了你添加的索引,是否有别的索引
3、索引是怎么加的,AddTime建的单独索引,还是和其他字段建的组合索引
4、索引中AddTime是升序还是降序
5、你的SQL多包了一层,t可以去掉,ROW_NUMBER()可以放到y里面

顾星河 | 园豆:7281 (大侠五级) | 2024-08-15 22:52
0

在某些情况下,给查询添加索引可能会导致查询变慢的情况。这可能是由以下几个因素引起的:

  1. 数据的分页查询:在你的查询中,使用了ROW_NUMBER函数进行了分页操作,这种操作往往需要对整个结果集进行排序。当数据量很大时,排序操作可能会变得比较耗时。在这种情况下,添加索引可能并不能提高性能,因为索引本身并不能加速排序操作。
  2. 索引维护成本:索引是用来加快数据检索效率的,但同时也会增加插入、更新和删除操作的成本。当频繁进行插入、更新和删除操作时,索引的维护成本逐渐增加,可能导致查询性能下降。
  3. 覆盖索引问题:如果你的查询涉及到其他列的数据,而索引只覆盖了部分列,那么数据库可能会选择执行全表扫描来获取其他列的数据,这反而会影响性能。
    对于你的具体查询,因为涉及到分页和排序操作,所以添加索引可能并不能显著提高查询性能。你可以尝试以下几个方法来优化查询:
  4. 调整查询的逻辑:根据实际业务需求,优化查询逻辑,减少不必要的排序和数据操作,可以通过调整查询条件或者分解查询来达到优化的目的。
  5. 使用分区表:如果数据量很大,可以考虑使用分区表来分割数据,减少单个表的数据量,从而提高查询性能。
  6. 定期维护索引:确保索引是优化的,根据实际查询需求进行索引优化和重建,避免过多的索引或者陈旧的索引导致性能下降。
  7. 使用缓存技术:如果查询的结果不经常变化,可以考虑使用缓存技术来提高响应速度,减少数据库的访问。
    总之,优化查询性能是一个复杂的过程,需要结合具体场景和实际运行情况进行综合考虑。建议你根据实际情况尝试不同的方法来优化查询性能。如果需要更详细的优化方案,请提供更多的查询和表结构信息,我将尽力提供更准确的建议。
Technologyforgood | 园豆:7541 (大侠五级) | 2024-08-16 08:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册