大佬教程收集整理的这篇文章主要介绍了为什么PostgreSQL没有在小表上使用我的索引?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
create table index_test ( ID int PRIMary KEY NOT NulL,text varchar(2048) NOT NulL,last_modifIEd timestamp NOT NulL,value int,item_type varchar(2046) ); CREATE INDEX IDx_index_type ON index_test ( item_type ); CREATE INDEX IDx_index_value ON index_test ( value )
@R_498_10673@下选择:
explain SELEct * from index_test r where r.item_type='B'; explain SELEct r.value from index_test r where r.value=56;
执行计划的解释如下:
Seq Scan on index_test r (cost=0.00..1.04 rows=1 wIDth=1576) Filter: ((item_typE)::text = 'B'::text)'
据我了解,这是一个全表扫描.问题是:为什么我的索引没有被使用?
可能是,原因是我桌上的行数太少了?我只有20个.你能不能给我一个sql语句,用随机数据轻松填充我的表来检查索引问题?
我发现这篇文章:http://it.toolbox.com/blogs/db2luw/how-to-easily-populate-a-table-with-random-data-7888,但它对我不起作用.声明的效率无关紧要,只有简单.
是.对于表中的总共20行,seq扫描总是比索引扫描更快.有可能这些行无论如何都位于单个数据库块中,因此seq扫描只需要一个I / O操作.
如果你使用
explain (analyze true,verbose true,buffers truE) SELEct ....
你可以看到更多关于真实情况的细节.
顺便说一句:你不应该使用文本作为列名,因为它也是Postgres中的数据类型(因此也是保留字).
以上是大佬教程为你收集整理的为什么PostgreSQL没有在小表上使用我的索引?全部内容,希望文章能够帮你解决为什么PostgreSQL没有在小表上使用我的索引?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。