为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8.1
【操作系统】:麒麟v10
【CPU】:ARM
【问题描述】:执行sql排序时慢,时常50多秒,执行计划贴在下边
SELECT
*
FROM
(
SELECT
TMP.,
ROWNUM ROW_ID
FROM
(
SELECT
phone ,
personal_id id ,
area_code ,
year ,
name ,
age ,
gender ,
id_card ,
card_status ,
data_status ,
examine_method ,
get_type ,
write_time ,
job_help ,
job_requirement ,
healing_get ,
healing_need ,
foster_service_require ,
accessiable_remould_req,
personal_status personalStatus
FROM
DT_DTGXKB_RES_ID
WHERE
(
id_card ='45010319410416052414'
AND year ='2022'
AND area_code LIKE '1301%'
)
ORDER BY
id DESC
)
TMP
WHERE
ROWNUM <=10
)
WHERE
ROW_ID > 0;
表结构在文档里,数据量700万
表结构.txt
更新下表的统计信息,当前执行计划看起来所使用的索引并不对。
试着收集一下这几列的统计信息,正常情况下应该是要走DT_DTGXXKB_RES_ID_CYA这个索引
STAT 100 ON DT_DTGXKB_RES_ID(PERSONAL_ID);
STAT 100 ON DT_DTGXKB_RES_ID(YEAR);
STAT 100 ON DT_DTGXKB_RES_ID(ID_CARD);
STAT 100 ON DT_DTGXKB_RES_ID(AREA_CODE);
在select 后面加上 /*+ TOP_ORDER_OPT_FLAG(0) */ 应该可以解决.
select /+ TOP_ORDER_OPT_FLAG(0) */ *
FROM ( SELECT TMP., ......