【发布时间】: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