【问题标题】:Performance difference between two identical MYSQL tables两个相同的 MYSQL 表之间的性能差异
【发布时间】:2018-02-19 16:40:49
【问题描述】:

我已将一个表 (InnoDB) 从我的数据库复制到另一个数据库,包括所有内容和索引。两个数据库都已优化,因此碎片不是问题。全部位于同一个 VPS 上。

我注意到我想要解决的两者之间的性能差异 (10-20%)。

database1.table(使用索引条件;使用where)

EXPLAIN SELECT price_range FROM database1.table WHERE category = 'seating' AND visibility = 'show' GROUP BY price_range ORDER BY price_range ASC   

[id] => 1 [select_type] => SIMPLE [table] => items [type] => ref [possible_keys] => visibility_producer,price_range_visibility,category_visibility,visibility_category_price_range [key] => visibility_category_price_range [key_len] => 228 [ref] => const,const [rows] => 10106 [Extra] => Using index condition; Using where

database2.table(使用 where;使用索引)

EXPLAIN SELECT price_range FROM database2.table WHERE category = 'seating' AND visibility = 'show' GROUP BY price_range ORDER BY price_range ASC    

[id] => 1 [select_type] => SIMPLE [table] => items [type] => ref [possible_keys] => visibility_producer,price_range_visibility,category_visibility,visibility_category_price_range [key] => visibility_category_price_range [key_len] => 228 [ref] => const,const [rows] => 10106 [Extra] => Using where; Using index

我认为性能差异是因为 database1.table 使用索引条件,而 database2.table 使用索引。相同的查询、相同的索引、相同的服务器。

这怎么可能?关于在哪里看的任何提示?

【问题讨论】:

  • 我会仔细检查这些表格是否与SHOW CREATE TABLE <tablename> 相同。同时运行ANALYZE TABLE <tablename> 以确保索引统计信息是最新的。
  • 查询是无意义的,所以我不确定你想让我们做什么:-(
  • @BillKarwin 感谢您的建议,找到了两个未复制的外键约束。将它们添加到第二个表中,现在性能相同。

标签: mysql performance indexing innodb


【解决方案1】:

如有疑问,请核实!

这些表实际上并不相同。这在检查表时显示:

SHOW CREATE TABLE <tablename>

在这种情况下,检查发现在复制表时没有复制两个外键约束。

任何外键都需要一个索引,因此如果没有使用现有索引,它可能会隐式构建一个。在没有外键定义的情况下,在这种情况下,两个表之间存在索引差异。

【讨论】:

  • 嗨,比尔,感谢您发表评论作为答案。我说得太快了,在添加了外键约束后,它们在短时间内表现相同。现在,性能差异又回来了。 SHOW CREATE TABLE 和 ANALYZE TABLE 显示相同的结果。
  • 两张表中的数据是不是也一样?优化计划部分取决于数据和值的分布。
  • 好吧,恐怕我没有更多的想法了。表之间必须有一些不同的东西,无论是数据还是元数据。如果一切都相同,我从未见过 MySQL 使用不同的优化计划。
  • 这是否衡量了 FK 的开销?
  • @RickJames,Pieter 说他现在在两张桌子上有相同的 FK。
猜你喜欢
  • 1970-01-01
  • 2023-02-07
  • 2017-10-03
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多