INT类型的性能(读取)比SMALLINT要好得多



我有一个130万行的表

我有smallint(索引)列这个表,当我运行非常简单的查询:

select * from table where field = x order by id limit 100

有时(当我用不同的值改变x时)查询很慢(有时10-20秒)。

然后我用int类型修改了这个列,并在这个列上创建了索引。

现在,相同的查询比以前快得多,几乎总是,它们不超过1秒。

因此,smallint占用的磁盘空间较少,但int类型的读取性能要好得多。

它是正确的吗?如果是,为什么?

原因可能是数据倾斜或索引统计数据过时。

第一个是值的分布。如果列中只有几个值,那么Postgres就足够聪明,不会使用索引。因此,它取决于索引的选择性。

如果需要更新索引统计信息,也会发生同样的事情。

数据类型的差异不太可能导致这种情况。更有可能的是,创建的新索引具有最新的统计信息。

最新更新