首页 > 解决方案 > 什么是更好的索引架构:组合的 varchar 列或几个整数列?

问题描述

我想让我的表模式更好。该表将每微秒插入一条记录。

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

当前设置(列id, name, one, two, three):

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

也许在未来(列id,,,namepath

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

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

标签: sqlpostgresqlindexing

解决方案


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

不是很明显。您可能会对性能产生一些小的影响,平衡诸如:

  • 字符串列是大于还是小于整数键(导致边缘更大或更小的数据页和索引)?
  • 两个可变长度字符串上的索引是否比可变长度字符串和三个固定长度键上的索引效率低?
  • 结果是否符合您的需要,或者在您获取记录后是否需要额外的处理?

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

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


推荐阅读