我刚刚在我的新 CentOS 6.4 服务器上安装了 Percona 5.6。这是一台 32 核氙气、72GB 内存、8x SAS RAID 10 设置的快速机器。到目前为止,一切都很好
我的旧服务器功能稍弱,仍在运行 MySQL 5.1。所以这是一个相当大的升级。但是我在使用 InnoDB 时遇到了一些问题,它似乎没有在某些表上正确使用索引。在我的旧机器上,相同的查询运行良好。
两台服务器具有相同的数据库。我在旧机器上做了一个 mysqldump 并将其导入到新的 Percona 5.6 服务器上。索引保持不变。两台服务器都使用相同的 my.cnf 配置设置。
表项有索引:item_id, item_format, item_private
并且包含大约 4000 万行。表格格式具有索引:format_id
并包含大约 250 行。
SELECT
i.item_name, i.item_key, i.item_date, f.format_long
FROM
items i, formats f
WHERE
i.item_format = f.format_id
AND
i.item_private = 0
ORDER BY
i.item_id DESC LIMIT 8
在我的旧服务器上,这个查询大约需要0.0003 seconds
. 在新服务器上,它接管了100 seconds
.
在 OLD 服务器上使用 EXPLAIN 查询。
+----+-------------+-------+--------+---------------+---------+---------+----------------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+---------------+---------+---------+----------------------+------+-------------+
| 1 | SIMPLE | i | index | item_format | PRIMARY | 4 | NULL | 8 | Using where |
| 1 | SIMPLE | f | eq_ref | PRIMARY | PRIMARY | 4 | dbname.i.item_format | 1 | |
+----+-------------+-------+--------+---------------+---------+---------+----------------------+------+-------------+
在新的 [问题] 服务器上使用 EXPLAIN 进行查询。
+----+-------------+-------+------+---------------+-------------+---------+--------------------+------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+-------------+---------+--------------------+------+---------------------------------+
| 1 | SIMPLE | f | ALL | PRIMARY | NULL | NULL | NULL | 219 | Using temporary; Using filesort |
| 1 | SIMPLE | i | ref | item_format | item_format | 4 | dbname.f.format_id | 3026 | Using where |
+----+-------------+-------+------+---------------+-------------+---------+--------------------+------+---------------------------------+
您可以看到它正在使用临时和文件排序。这似乎是缓慢的原因。
知道如何解决这个问题吗?