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)
AddTime字段有为空的情况?
我以前遇到过,索引列有为空的情况,Oracle一万来条查了十来秒
1、耗时10秒,开销主要在哪里
2、是否走了你添加的索引,是否有别的索引
3、索引是怎么加的,AddTime建的单独索引,还是和其他字段建的组合索引
4、索引中AddTime是升序还是降序
5、你的SQL多包了一层,t可以去掉,ROW_NUMBER()可以放到y里面
在某些情况下,给查询添加索引可能会导致查询变慢的情况。这可能是由以下几个因素引起的: