【问题标题】:MySQL: testing performance after dividing a tableMySQL:分表后测试性能
【发布时间】:2013-02-04 17:10:58
【问题描述】:

我做了一个测试,看看划分索引大表是否会提高性能。

原始表:20000 行。 子表:4x5000 行。

主表分为4张表,所有表都有索引,在测试中每个sql查询循环执行10000次,以测量更准确的查询次数。

当我在表中搜索索引列时,我发现性能没有差异,并且原始(20000 行)表和新(5000 行)表的查询时间相同。

我通过删除所有表的索引尝试了相同的测试,没有索引,性能差异很明显,在子表中搜索比在大表中搜索快 6 倍。但是索引性能是一样的。

那么你认为把我的桌子分成更小的桌子是浪费时间吗?

注意:20000大小只是为了测试,我的真实数据会在100M以上。

【问题讨论】:

  • 表结构应该由应用程序的需要和合乎逻辑的东西决定。尤其是在已经很小的 20,000 条记录的表上。 (行大小限制为 65,535 字节,因此即使您将其最大化,数据大小也不会那么多)
  • 这是在浪费时间!
  • 样本表是用来测试的,实际数据会比这个大很多。

标签: mysql sql performance indexing


【解决方案1】:

是的,这是浪费时间。数据库可以轻松处理数百万行,而 20,000 行相对较小。正如您所注意到的,索引可以快速查找数据。在大多数情况下,数据的大小不会显着影响查找速度。如果大小差异为 100 或 1000 倍,则查询可能需要几毫秒的时间,但您正在处理的规模不会有真正的区别。

【讨论】:

  • 我的示例表仅用于测试,我的真实数据将达到 100M 行或在该范围内。如果您关于 100 或 1000 倍大小差异的观点是准确的,那么划分策略将是一种浪费,因为我不会将我的桌子分成 100 张桌子!。
  • @user2007059 这样你就必须知道要查看哪个表,这将是更多的代码,不会有一个“好”的方式来知道它需要哪个表。
【解决方案2】:

您已有效完成的工作已被重新发明Partitioning of Tables。我不会使用您自己的子表方案,而专注于使用分区表将自动意味着使用内部子表,如果您适当地制定 SQL,如果不需要,子表将自动从操作中排除。

但是,所有分区的管理都将在服务器本身上进行,因此您的客户端代码可以保持简单,您仍然只需要处理单个表。

【讨论】:

    猜你喜欢
    • 2012-02-29
    • 2016-05-20
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多