sql - 什么是更好的索引架构:组合的 varchar 列或几个整数列?
问题描述
我想让我的表模式更好。该表将每微秒插入一条记录。
桌子已经太大了,所以我无法测试桌子本身。
当前设置(列id
, name
, one
, two
, three
):
SELECT *
FROM table
WHERE name = 'foo'
AND one = 1
AND two = 2
AND three = 3;
也许在未来(列id
,,,name
)path
:
SELECT *
FROM table
WHERE
name = 'foo'
AND path = '1/2/3';
如果我将三integer
列改为一varchar
列,SQL 会比现在运行得更快吗?
使用 PostgreSQL
varchar
长度为 5~12。我想我可以使用bigint
withzerofill
(1/2/3
to1000010200003
),它可能比 varchar 更快。
解决方案
如果我将三个整数列更改为一个 varchar 列,SQL 会比现在运行得更快吗?
不是很明显。您可能会对性能产生一些小的影响,平衡诸如:
- 字符串列是大于还是小于整数键(导致边缘更大或更小的数据页和索引)?
- 两个可变长度字符串上的索引是否比可变长度字符串和三个固定长度键上的索引效率低?
- 结果是否符合您的需要,或者在您获取记录后是否需要额外的处理?
在任何一种情况下,可用索引都将用于查找与条件匹配的行。这是一个索引查找,因为比较都是相等的。然后 Postgres 将直接转到您需要的行。除了指数比较之外,还有很多工作要做。
您正在描述每秒 1,000,000 次插入或每天 8400 万次插入 - 这是很多。在这种情况下,您没有使用在笔记本电脑上运行的现成 Postgres 实例。您应该有适当的 DBA 支持来回答这样的问题。
推荐阅读
- node.js - 如何在 Node.js 本地开发中集成 IBM Watson Assistant 服务
- r - ARIMA 预测值为空白
- javascript - 循环遍历 json 以获取嵌套键
- javascript - JavaScript - 提取两个字符之间的数字字符串的最佳方法
- python - 尝试查看评级时权限不足,使用 google play console api 对我的应用程序的评论
- spring-kafka - Spring-Kafka - 如何使用注释为侦听器指定分区范围?
- apache - 使用 IP 地址访问站点文件。
- bash - 如何让 bash IFS 在不需要换行符的情况下获取列表中的最后一个文件
- salt-stack - 在 saltstack 中存储数据的最佳位置是什么
- node.js - 我可以在环回中操作要保存在 beforeRemote 方法中的数据吗?