mysql - 如果我知道分布将不相等,如何计算哈希中的桶数?

标签 mysql performance hash hashtable partitioning

我有以下问题(我将在下面给出实际上下文):
我有一系列 id(当然是与这些 id 相关联的数据,但我会给出核心问题)1..最多 500000
现在这些是连续的但是它们是随机“到达”的,有些可能永远不会“到达”,而另一些可能会分批频繁出现,所以它们分布不均(我说到达时指的是我的意思作为数据库中的记录)。
如果我创建某种 id 计数及其外观,我如何才能找到多少个合适的桶数来进行模运算,以便桶被均匀填充?

我的问题的背景:
我正在阅读 hash partitioning
我认为基本假设是您散列的列值分布良好。但是,如果在表中您不能对分布良好的列/属性进行分区(因为数据分布不均,例如客户 ID 购买的东西比其他人购买的东西少)。
那么应该如何处理呢?分区范围应该小一些吗? (我的意思是模数部分要小而不是大)

最佳答案

如果你想每月获取每个分区的分布情况,那么你可以使用以下语句来实现:

SET @partitions = 4; 

SELECT
    id_column % @partitions as bucket,
    MONTH(your_date) as month,
    COUNT(*) as cnt
GROUP BY
    month,
    bucket;

并使用变量@partitions 的值。如果时间线跨度超过一年,则只添加一个 YEAR 列:

SET @partitions = 4; 

SELECT
    id_column % @partitions as bucket,
    YEAR(your_date) as year,
    MONTH(your_date) as month,
    COUNT(*) as cnt
GROUP BY
    year,
    month,
    bucket;

这是查看可用数据如何在分区之间分配的好方法。

关于mysql - 如果我知道分布将不相等,如何计算哈希中的桶数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25612062/

相关文章:

sql - GATHER_PLAN_STATISTICS 不生成基本计划统计信息

c++ - 如何为 QSet<SomeClass*> 容器编写 qHash?

javascript - Node-Webkit - 计算部分下载文件的哈希值 [opensubtitles]

mysql排序顺序操作

php - mysql在oop php中选择

mysql - 通过联接、全表扫描提高查询性能

Ruby:我怎样才能让一个散列接受多个键?

java - Inject 2 Data sources into spring+hibernate application always throw no transaction is in progress 错误

MySQL间隙锁推理

java - 多线程增加计算时间 - Java