一. 问题描述
今天开发的找到我,说他创建了一个索引,但是查看执行计划,依旧走的是全表扫描,很让人头疼。
让我帮忙分析下具体的原因。
二. 解决方案
我把复杂问题简单化,就单表执行where条件查询表,看能不能重现开发说的问题
结果居然真的和他说的一样
我看了下居然真的走了全表扫描,不过我看了下,基本上都在buffers中缓存了
shared hit代表的是缓存的数据块,一个数据块默认是8k,算上和表的总数差不多了,所以直接从内存读会比通过索引回表块,此时当然就直接走全表从内存中读取了。
因为buffers是全局的,而且这个环境是生产环境,我暂时不好处理,于是就等了几分钟,重新运行查询。
从上图可以看到,最终就走了索引查询了。