首页 > 解决方案 > PostgreSQL 中按列值的搜索性能

问题描述

我有一张桌子,里面有大约 4000 行。该表有一个名为“类型”的列。查询

SELECT DISTINCT type FROM table

显示 14 行。

在最近的将来,该表将增长到大约 1000 万行,我不知道不同的“类型”值是保留 14 还是增加。

如果我创建另一个名为“types”的表并在我的主表中创建“type_id”列而不是字符串“type”,这是否有意义?在这种情况下,每次遇到新值时,我都必须在类型表中插入新行。

或者仅仅为我的类型列添加一个哈希索引然后搜索就足够了

SELECT * FROM table WHERE table.type IN('value1', 'value2', 'value3')

?

标签: sqlpostgresql

解决方案


我投票给一张新桌子。这将确保您有一个明确的类型列表。您可以添加其他信息,例如:

  • 代码
  • 姓名
  • 描述
  • 创建日期
  • 由...制作

此外,这将使任何查询都更快地获取类型列表(例如对于应用程序)。它还将确保类型是一致的。如果它们是字符串,这一点尤其重要——它们可能拼写错误、有隐藏字符,或者只是激增。


推荐阅读