sql - Oracle Sql - 今天获取查询结果比昨天慢得多
问题描述
我在 Oracle 数据库中的同一架构上有 2 个表。
第一个表有 700 万行,不再更新。(没有插入)第二个表有大约 500 万行,并且不时更新。
问题:
直到昨天
SELECT count(*) from first_table
,SELECT 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 ;
解决方案
按照赛勒斯在评论中的建议,运行explain plan,并进行一些挖掘:
EXPLAIN PLAN FOR SELECT count(*) FROM first_table
EXPLAIN PLAN FOR SELECT count(*) FROM second_table
接着:
SELECT * from plan_table
显示该表每次都在进行全表扫描,尽管设置了索引。
检查表列信息显示执行插入的脚本还将索引字段设置为Nullable=True
,因此破坏了整个事情。
推荐阅读
- ios - 实施问题 Migrate Cognito UserPool with Lambda Trigger for iOS
- javascript - 使用 fetch() 在服务器上发送 .zip 文件时遇到问题
- python - 执行用于抓取的 Python 代码时出现问题
- python - 使用python从.docx文件中的表中获取文本
- angular - typeError:无法解构“object null”的属性“init”,因为它在 ngx 电子图表中为 null
- node.js - 存储 MongoClient.connect()
- swift - SwiftUI - 带有坐标的 .position 修饰符
- java - 带有 Windows 10 zip 文件的 Java 14 无效 CEN 标头(错误压缩方法:9)
- flutter - 当使用 setState() 更改 URL 时,如何让 Image.network 更新?
- javascript - 如何使用 XHRWebRequest 在 URL 上上传文件?