gpt4 book ai didi

mysql - 使用无符号整数的算术元素(加法)进行 SQL 范围分区 - 它会优化 WHERE 查询吗? (MySQL、PostgreSQL)

转载 作者:行者123 更新时间:2023-11-29 23:18:39 24 4
gpt4 key购买 nike

我读到了 MySQL(和 PostgreSQL)here 中的范围分区。我还知道,如果我对表进行分区,一些 WHERE 查询将会得到优化。

例如按used_at日期分区:

PARTITION BY RANGE (used_at) (
PARTITION p0 VALUES LESS THAN ('2012-01-01'),
PARTITION p1 VALUES LESS THAN ('2013-01-01'),
PARTITION p2 VALUES LESS THAN ('2014-01-01'),
);

将进行如下查询:

WHERE used_at >= '2013-05-01' AND used_at < '2013-09-01'

例如更快,因为它实际上只使用 1/3 大小的子表进行搜索。

问题是我是否有两个表:

user (3 000 000 records):
user_id UNSIGNED INT ...
...


messages (50 000 000 records)
sender UNSIGNED INT (refers to user)
recipient UNSIGNED INT (refers to user)

我们得到的线索如下:

WHERE ... (sender = 1234567 OR recipient = 1234567)
...
GROUP BY (sender + recipient)

嗯,我的问题是:

a)我可以按照以下方式进行分区

PARTITION BY RANGE (sender + recipient) (
PARTITION p0 VALUES LESS THAN (1000000),
PARTITION p1 VALUES LESS THAN (2000000),
...
PARTITION p5 VALUES LESS THAN (6000000),
);

b) 如果是,它会优化 WHERE 条件,例如

WHERE ... (sender = 1234567 OR recipient = 1234567)

如果是无符号整数?

问题基本上是关于 MySQL 的,但我也对 PostgreSQL 和 Oracle 的 future 感到好奇。

最佳答案

MySQL...

WHERE ... (sender = 1234567 OR recipient = 1234567)

优化不好。这样做会更好

( SELECT ... WHERE sender = 1234567 )
UNION DISTINCT
( SELECT ... WHERE recipient = 1234567 )

并且对发件人和收件人有单独的索引(或者至少从每个索引开始)。

PARTITION 可以处理很少的表达式,不包括 (x+y)。

GROUP BY (sender + recipient)

无法通过任何形式的 INDEX 或 PARTITION 进行优化。它将涉及全面扫描,可能还包括文件排序。

如果您的意思是GROUP BY发件人、收件人,那就是另一回事了。

WHERE used_at >= '2013-05-01' AND used_at < '2013-09-01'

是否从分区中受益,至少与某些以 used_at 开头的 INDEX 相比没有。

WHERE used_at >= '2013-05-01' AND used_at < '2013-09-01'
AND x = 1

想要 INDEX(x,used_at)

WHERE used_at >= '2013-05-01' AND used_at < '2013-09-01'
AND x > 1

有问题——两个范围。在这个示例中,BY RANGExused_at上进行分区将是有益的。这是因为:第一个“分区修剪”将首先选择所需的分区,然后普通索引(如果有)将接管以完成任务。 (如果没有有关表和数据分布的更多详细信息,就不可能说出最佳 INDEX 是什么。)

我没有明白你关于用户加上消息的观点。

关于mysql - 使用无符号整数的算术元素(加法)进行 SQL 范围分区 - 它会优化 WHERE 查询吗? (MySQL、PostgreSQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27544370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com