什么是更好的索引模式:组合的 varchar 列还是几个整数列?



我想让我的表架构更好。此表将每微秒插入一条记录。

表格已经太大了,所以我无法测试表格本身。

当前设置(列id、 列name、 列one列 、 列twothree):

SELECT * 
FROM table
WHERE name = 'foo' 
AND one = 1 
AND two = 2 
AND three = 3;

也许将来(idnamepath列):

SELECT * 
FROM table
WHERE
name = 'foo' 
AND path = '1/2/3';

如果我将三列integer更改为一列varchar列,SQL 的运行速度会比现在快吗?

  • 使用PostgreSQL

  • varchar长度为5~12。 我想我可以将bigintzerofill一起使用(1/2/31000010200003),这可能比 varchar 更快。

过早优化是万恶之源。

如果你有固定数量的整数,或者至少有一个合理的上限,请坚持为每个整数设置一个单独的列。

然后,您将在 alk 列上使用组合索引,理想情况下,首先使用不可为空和选择性的列。

如果要优化,请使用仅占用两个字节的smallint

如果我将三个整数列更改为一个 varchar 列,SQL 的运行速度会比现在快吗?

不明显。 您可能会对性能产生一些小的影响,平衡以下因素:

  • 字符串列是大于还是小于整数键(导致数据页和索引略大或变小)?
  • 两个可变长度字符串
  • 上的索引是否比可变长度字符串和三个固定长度键上的索引效率低?
  • 结果是否与您需要的匹配,或者获取记录后是否需要进行其他处理?

无论哪种情况,可用索引都将用于查找与条件匹配的行。 这是一个索引搜索,因为比较都是相等的。 然后,Postgres 将直接转到您需要的行。 除了指数比较之外,还有很多工作要做。

你描述的是每秒1,000,000次插入或每天8400万次插入 - 这是很多。 在这种情况下,您不会使用笔记本电脑上运行的现成的 Postgres 实例。 你应该有适当的DBA支持来回答这样的问题。

相关内容

  • 没有找到相关文章