首页 > 解决方案 > Oracle Sql - 今天获取查询结果比昨天慢得多

问题描述

我在 Oracle 数据库中的同一架构上有 2 个表。

第一个表有 700 万行,不再更新。(没有插入)第二个表有大约 500 万行,并且不时更新。

问题:
直到昨天 SELECT count(*) from first_tableSELECT count(*) from second_table 两者都在大约 0.5 秒内返回了结果。

今天:
SELECT count(*) from first_table--> 0.5 秒
SELECT count(*) from second_table--> 18-20 秒。

据我所知,未更改的表(键、索引等),仅在第二个表上完成了 INSERT。插入物一点也不大。

如何将执行速度 SELECT count(*) from second_table降低到所需时间?

更新:

试过这个,它没有帮助:
EXEC DBMS_STATS.GATHER_TABLE_STATS('SCHEMA','TABLE_NAME');

ANALYZE TABLE izvod_raif_new COMPUTE STATISTICS ;

标签: sqloracle

解决方案


按照赛勒斯在评论中的建议,运行explain plan,并进行一些挖掘:

EXPLAIN PLAN FOR SELECT count(*) FROM first_table

EXPLAIN PLAN FOR SELECT count(*) FROM second_table

接着:

SELECT * from plan_table

显示该表每次都在进行全表扫描,尽管设置了索引。
检查表列信息显示执行插入的脚本还将索引字段设置为Nullable=True,因此破坏了整个事情。


推荐阅读