【问题标题】:Can I create hash index in a partitioned table?我可以在分区表中创建哈希索引吗?
【发布时间】:2013-07-29 07:28:02
【问题描述】:

我有一个相当大的表,有 3 亿条记录(表存储大约 13GB)。

我已经将这张表分成了 10 个分区,但是每个分区仍然有将近 3000 万条记录,这使得 select xxx where column1 = "yyy" 非常慢(每个简单的选择几乎 30 秒)。

现在我想通过将哈希索引添加到我用于查询数据的column1 来加快速度,但结果是添加索引非常非常慢。

所以我想知道,是否有可能做到这一点?以及如何加快此操作?

【问题讨论】:

  • 但是你不是只需要添加一次索引吗?
  • 索引列是可以的,但是你有很多数据,在3000万的记录表上添加索引的操作不可能很快。除非您拥有一流的硬件,尤其是 HDD。
  • 为什么是 HASH 而不是 BTREE 索引?
  • @raffian,我认为 Hash 比 btree 快得多。
  • @MrROY 并非在所有情况下; HASH 对于基于键的查找更快,但不适用于基于范围的选择,归结为您选择数据的方式(主要)......请参阅stackoverflow.com/questions/7306316/btree-vs-hashtable

标签: mysql hash data-partitioning


【解决方案1】:

最后我完成了create index 的操作,对my.cnf 进行了一些更改,这里是一个简短的结果:

总时间:2735 秒。

记录:3 亿条(10 个分区,每个分区 3000 万条记录)。

使用哈希创建索引。

my.cnf:

myisam_sort_buffer_size = 4096M
sort_buffer_size = 4096M

希望对其他人有所帮助。

【讨论】:

  • 您可能还希望将 mysql-tmp 目录设置为 ram-disk。
猜你喜欢
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 2013-01-03
  • 2021-01-20
  • 1970-01-01
  • 2016-06-07
  • 2014-09-14
相关资源
最近更新 更多