我有一张130万行的表
我在这个表中有smallint
(索引)列,当我运行非常简单的查询时:
select * from table where field = x order by id limit 100
有时(当我用不同的值更改x时)查询非常慢(有时10-20秒)。
然后我用int
类型更改了此列,并在此列上创建了索引。
现在,相同的查询比以前快得多,几乎总是如此,它们不会超过1秒。
因此,smallint
占用较少的磁盘空间,但读取int
类型的效果要好得多。
没错?如果是这样,为什么?
答案 0 :(得分:0)
原因可能是数据倾斜或陈旧的索引统计数据。
首先是价值分配。如果列中只有几个值,那么Postgres足够聪明,不能使用索引。因此,它取决于指数的选择性。
如果需要更新索引统计信息,也会发生同样的事情。
数据类型的差异极不可能推动这一点。更有可能的是,创建的新索引具有最新统计信息。