IT评测·应用市场-qidao123.com

标题: ORACLE 实行查询语句慢(不走对应索引) [打印本页]

作者: 梦见你的名字    时间: 2025-3-10 10:30
标题: ORACLE 实行查询语句慢(不走对应索引)
 
1. 索引未被创建或未正确创建



确保为查询中涉及的列创建了索引。例如,假如你常常需要按column_name列进行查询,确保已经为该列创建了索引,索引创建语句
   CREATE INDEX idx_column_name ON table_name(column_name);
  2、索引不可用


原因:索引大概被标志为不可用(UNUSABLE)通常是由于索引重建失败或数据导入操作导致的。
办理方法:检查索引状态并重建索引
检查索引状态
   SELECT INDEX_NAME, STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'TABLE_NAME'; 
  假如索引不可用,重建索引
   ALTER INDEX INDEX_NAME REBUILD;
  3、统计信息不正确

原因:
Oracle 优化器依赖统计信息来决定实行筹划。假如表的统计信息不正确或过时,优化器大概会错误地选择不利用索引。
所以创建索引并且实行语句没有问题,则 可以利用DBMS_STATS包来收集最新的统计信息:
办理方法:  
   EXEC DBMS_STATS.GATHER_TABLE_STATS('SCHEMA_NAME', 'TABLE_NAME');
EXEC DBMS_STATS.GATHER_TABLE_STATS('SYMDR', 'LAB_REPORT_INFO');
  4、假如收集最新的统计信息实行报错

错误信息:
ORA-20005: object statistics are locked (stattype = ALL) 则看是否有死锁
   SELECT s.sid, s.serial#, l.object_id, o.object_name, l.session_id blocking_sid
FROM v$locked_object l
JOIN dba_objects o ON l.object_id = o.object_id
JOIN v$session s ON l.session_id = s.sid
WHERE o.object_type = 'LAB_REPORT_INFO';
  5、停止会话

假如找到死锁可以利用如下命令停止会话
   ALTER SYSTEM KILL SESSION 'sid,serial#';
   6、强制更新统计信息

假如确定没有其他会话正在利用统计信息,或者已经停止了阻塞会话,可以实验强制更新统计信息:
   
BEGIN
  DBMS_STATS.GATHER_TABLE_STATS(
    ownname       => 'OWNER',
    tabname       => 'TABLE_NAME',
    estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,
    method_opt    => 'FOR ALL COLUMNS SIZE AUTO',
    cascade       => TRUE,
    force         => TRUE);
END;
/
BEGIN
  DBMS_STATS.GATHER_TABLE_STATS(
    ownname       => 'SYMDR',
    tabname       => 'LAB_REPORT_INFO',
    estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,
    method_opt    => 'FOR ALL COLUMNS SIZE AUTO',
    cascade       => TRUE,
    force         => TRUE);
END;
/
  7、 检查实行筹划

利用 EXPLAIN PLAN 或 DBMS_XPLAN 检察查询的实行筹划,了解优化器为何选择不利用索引: 
   EXPLAIN PLAN FOR SELECT * FROM TABLE_NAME WHERE COLUMN_NAME = 'VALUE';
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
  
  EXPLAIN PLAN FOR
select * from lab_report_info where org_code='XX'   and request_no='XX'      and local_id='XX' ; 
SELECT * FROM table(DBMS_XPLAN.DISPLAY());

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4