1、什么是数据库的执行计划
执行计划:数据库如何执行sql语句,包括如何执行查询,是否通过索引查询以及索引信息,数据库服务器会选择资源消耗最小的方案(可以理解为当前最优的执行方案)
使用explain可以为sql语句设置标志,返回执行计划信息
【explain select * from user_money a where a.user_name = ‘张三’】
附大神解释参考
数据库系统自动收集统计信息,当insert,truncate,delete,update的数据量超过10%,会自动重新收集统计信息。
常见的分区表DDL如 split partition、add partition都会生成没有统计信息的表分区table partition,dbms_stats.lock_table_stats锁表统计信息对没有统计信息的分区同样有效,自动收集统计信息的作业不会收集这些实际没有统计信息的分区。
使用DBMS_STATS.LOCK_TABLE_STATS锁定相关统计信息 语句为: EXECUTE DBMS_STATS.LOCK_TABLE_STATS (‘owner name’, ‘table name’); 查询锁定状态 SELECT stattype_locked FROM dba_tab_statistics 当锁定表的统计信息后,这个表相关的对象的统计信息也被锁定,比如列信息、直方图、索引的统计信息。 在锁定前,请在适当时刻对表的统计信息进行收集,并确认当前的统计信息是合适的。
2、如何更改数据库的执行计划(如何得到最优的执行计划)
执行EXECUTE DBMS_STATS.LOCK_TABLE_STATS (‘owner name’, ‘table name’); 重新收集统计信息即可,因为数据库的自动收集统计信息不会收集常见分区表的统计信息。
3、经验积累
重跑时直接向引擎中间表插入数据,未执行BIZ存储过程(收集统计信息的过程未被调用),导致数据库进行了当前认为最好的执行计划(实际没有根据当前数据库的具体情况进行分析),对当前数据库来说并不是最好的执行计划,导致读取数据特别慢。
4、PL\SQL怎么查看执行计划
plsql工具中使用【解释计划窗口】查看执行计划
5、实例分析-------当sql执行非常慢
方法一:
先查v