【发布时间】:2019-05-10 04:42:11
【问题描述】:
我想让我的表架构更好。此表将每微秒插入一条记录。
表格已经太大了,所以我无法测试表格本身。
当前设置(列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与zerofill(1/2/3到1000010200003)一起使用,这可能比varchar 更快。
【问题讨论】:
-
用你给我们的东西可能无法回答这个问题。但是,您可以运行各种速度测试来回答这个问题。确保您正在为要搜索的字段编制索引。
-
Int 比 varchar 快你可以在这里看到答案。stackoverflow.com/questions/2346920/… 但这里有三个 int 字段,如果你将它们更改为一个 varchar 字段,那么速度将取决于 varchar 的大小你声明
-
@ColinMac 实际上,我不是这张桌子的经理。经理告诉我使用他所知道的所有索引。
-
@marc_s 添加了有关它的内容。我只是想知道一个字段可以比三个字段更快。
-
1 个字段和 3 个字段之间的选择取决于您需要运行的查询类型。如果您只使用字段
one、two、three直接查找,那么组合字符串可能会更快。如果您在任一尾随列上进行查找而没有指定one中的值(如果需要,还指定two),结果会变慢。在任何一种情况下,选择范围都比较困难,但如果您不总是指定前导范围,则需要对单个列进行更多工作。
标签: sql postgresql indexing