若表并没有记录,为什么查询需要时间



我们已经删除了该表的所有记录,之后我们从该表执行select*。为什么此查询需要时间。。?

如果您计划删除表中的所有记录,"TRUNCATE";可能是一个替代方案。请记住,truncate将执行隐式提交(DDL命令(。

高水位线综合征(HWM(

您正在经历";HWM综合征";。如果在表中插入一百万行并执行select count(*) from table。然后删除所有行。当你现在做一个新的select count(*) from table时,它所花的时间和其中有一百万行一样长。什么!!这怎么可能??

";嘿,里面什么都没有——而且需要很长时间。这个数据库太糟糕了,Oracle表现不佳,MariaDB好多了">(HWM综合征(

和往常一样,它可以归结为理解甲骨文的机器是如何工作的。执行delete from table时不会删除任何块。它们被保存以备将来插入和更新。当进行全表扫描(无索引扫描(时,所有块将从一开始读取,直到HWM。截断操作将重置HWM。

你可以在这里阅读更多关于HWM的

祝你好运!

在ALL_TABLES中进行选择并检查row_count,如果它不是0,则看起来统计数据没有更新。如果不是0,则运行

EXEC DBMS_STATS.GATHER_TABLE_STATS ('Schema_NAME', 'TABLE_NAME');
SELECT * from all_Tables where table_name = 'table_name'
then run the select statment

最新更新