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

时间:2016-10-08 13:53:37

标签: database postgresql sqldatatypes postgresql-9.5

我有一张130万行的表

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

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

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

然后我用int类型更改了此列,并在此列上创建了索引。

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

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

没错?如果是这样,为什么?

1 个答案:

答案 0 :(得分:0)

原因可能是数据倾斜或陈旧的索引统计数据。

首先是价值分配。如果列中只有几个值,那么Postgres足够聪明,不能使用索引。因此,它取决于指数的选择性。

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

数据类型的差异极不可能推动这一点。更有可能的是,创建的新索引具有最新统计信息。