【问题标题】:how to query data in a fast way after table splitting?分表后如何快速查询数据?
【发布时间】:2012-02-24 17:49:48
【问题描述】:

我有一个大约 10 亿条记录的 MySQL 表。查询时速度很慢。 所以我把这个表按ID拆分成10个结构相同的子表。

table_1(1-1000000)

table_2(10000001-2000000)

table_3(20000001-3000000)
......

但是分表后如何快速查询数据呢?

当我像这样查询用户:select name from table where name='mark'时,我不知道去哪个表查询,因为我可以得到ID范围。

【问题讨论】:

  • 通过检查范围。您是否已经尝试过索引?
  • 尝试分区 (dev.mysql.com/doc/refman/5.1/en/partitioning.html),它可以解决所有问题。对于您所做的拆分,您首先需要根据 ID 检查需要查询的表,然后对该表运行查询。顺便说一句,正如“Mitch Wheat”所建议的那样,您是否尝试过对包含 10 亿条记录的原始表进行索引?
  • @Abhay 记录每天都在增加,因此将所有记录存储在一个表中没有帮助。查询问题如下:"select name from table where name='mark'",不知道去哪个表查询,因为我可以得到ID的范围。
  • @mitch-wheat,这个表正在快速增长,所以只添加索引不是一个好的解决方案。
  • @@xiaochong0302:想解释一下为什么不?

标签: mysql large-data


【解决方案1】:

当您显示示例查询时,以这种方式拆分表完全不是正确的方式。你实际上创造的问题比解决任何问题都多。

让我们回到大桌子:

第 1 步是看看为什么它很慢,所以发布 explain sql 命令来获得一个概览。

第 2 步是查看您是否可以改进该查询。陈述诸如索引之类的东西不是一个好的解决方案可能是正确的。如果是这样,请提供显示这一点的测量值。

第 3 步是跳出框框思考。您正在一个非常大的表中运行查询,该表不断插入。考虑使用专门为搜索设计的索引。例如,考虑使用 Solr 为搜索命令建立索引。

最终您甚至可能会到达硬件点,但在此硬件上它无法变得更快。但首先要按照步骤操作,添加正确的信息、具体的测量值和规格,这样您就可以获得更完整的案例支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    相关资源
    最近更新 更多