我已经在我的表上创建了几个索引和主键索引,当我运行select查询时,第一次显示结果需要大约30秒的时间。
但在第一次执行后,当我再次运行查询时,它在不到2秒的时间内给出了结果,在随后的执行中总是一样的。
当我在网上检查某个地方时,我发现由于索引数据库缓存,执行速度更快,因此我使用alter system flush buffer_cache;
清除数据库缓存,然后再次执行查询,第一次显示结果需要30秒,第二次执行只需要2秒显示结果。
我是一个新的索引,这是索引的工作方式,还是我有任何其他方法来工作我的查询,将显示结果在2秒的所有时间。
发布于 2021-02-15 22:57:09
它与索引或索引缓存无关。它与缓冲区缓存有关,您正在清除缓冲区缓存。无论何时执行查询,oracle都会检查缓冲区缓存,以查看缓存中是否已经存在所需的内容。如果在缓存中找到它,他可以避免从磁盘进行昂贵的物理读取。如果未在缓存中找到,则从磁盘读取它(速度慢、开销大),并将其放入缓存中。下一次需要数据时,只需从缓存中提取(快速)即可。但是,当您清除缓存时,您会强制它返回到物理磁盘读取。停止刷新缓冲区缓存,数据库将使用正常的缓存数据“工作集”进行“稳定”。
https://stackoverflow.com/questions/66210181
复制相似问题