为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: DM8
【操作系统】:LINUX
【CPU】: 32核
【问题描述】*:有一张数据表,每天数据量大概十几万,总数据量5000w条,有两个时间字段,分别单独加了索引,当where条件的时间字段和order by的时间字段不一致时,查询极慢,几分钟都跑不出结果。只有当时间字段一致时才会秒出结果。这种是什么原因?
sql如下:
sql1:
select *
from A.A1
where DATA_TIME > '2025-06-21 11:30:56.202000'
ORDER BY INSERT_TIME ASC
LIMIT 0,3500;
sql1查询速度极慢
sql2:
select *
from A.A1
where DATA_TIME > '2025-06-21 11:30:56.202000'
ORDER BY DATA_TIME ASC
LIMIT 0,3500;
sql2:查询速度非常快
索引情况:
1.创建一个 复合索引试试, (DATA_TIME ,INSERT_TIME). 并收集一下新建索引的统计信息.
2.看一下DATE_TIME的字段类型是否是字符类型,如果不是 ,调整sql中对应的条件,避免隐式转换.
索引无法同时满足过滤和排序,排序操作的额外开销。可以看一下执行计划、traceonly、et。看一下具体耗时在哪里。
可以尝试创建联合索引,过滤列在前,排序列在后。
如果过滤列效果不好时,可以尝试用过滤列创建分区表,只创建排序列索引。
语句中加个hint TOP_ORDER_OPT_FLAG(0)试试像这样