0
我正在两台不同的服务器上运行同一组数据的SQL查询。相同的查询使用相同的数据,不同的性能
服务器1:MySQL的版本14.14 DISTRIB 73年5月1日,对于使用的readline 5.1
服务器2未知-Linux的GNU(x86_64的):MySQL的版本15.1 DISTRIB 10.0.12-MariaDB的,用于osx10.10(x86_64的),使用的readline 5.1
查询是:
SELECT
*
FROM
`user`
WHERE
user_id IN (SELECT user_id FROM reader_detail)
AND `user`.type <> 4
AND `user`.type <> 11
AND user_id NOT IN (
SELECT
`user_id`
FROM
reader_log
WHERE
reader_log.`date` > DATE_SUB(CURDATE(), INTERVAL 6 MONTH)
GROUP BY
user_id
ORDER BY
user_id ASC
)
AND username IS NOT NULL;
EXPLAIN SELECT服务器1上:
+----+--------------------+---------------+-----------------+---------------+---------+---------+------+-------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+---------------+-----------------+---------------+---------+---------+------+-------+--------------------------+
| 1 | PRIMARY | user | ALL | NULL | NULL | NULL | NULL | 29865 | Using where |
| 3 | DEPENDENT SUBQUERY | reader_log | index | NULL | PRIMARY | 7 | NULL | 17 | Using where; Using index |
| 2 | DEPENDENT SUBQUERY | reader_detail | unique_subquery | PRIMARY | PRIMARY | 4 | func | 1 | Using index |
+----+--------------------+---------------+-----------------+---------------+---------+---------+------+-------+--------------------------+
EXPLAIN SELECT服务器2上:
+------+--------------------+---------------+----------------+----------------------+---------+---------+----------------------------------------+-------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+--------------------+---------------+----------------+----------------------+---------+---------+----------------------------------------+-------+--------------------------+
| 1 | PRIMARY | reader_detail | index | PRIMARY | PRIMARY | 4 | NULL | 17682 | Using where; Using index |
| 1 | PRIMARY | user | eq_ref | PRIMARY | PRIMARY | 4 | rklocaldbmigrate.reader_detail.user_id | 1 | Using where |
| 3 | DEPENDENT SUBQUERY | reader_log | index_subquery | PRIMARY,user_id_date | PRIMARY | 4 | func | 16 | Using index; Using where |
+------+--------------------+---------------+----------------+----------------------+---------+---------+----------------------------------------+-------+--------------------------+
的查询接受小于1秒到在服务器2上运行:5894点的行中的组(0.09秒)。然而,我不得不中止对服务器1之后查询跑了1分钟。
这里发生了什么?是因为服务器2使用MariaDB,而它是服务器1上的MySQL?我在这里无能为力。再次,它是同一组数据(我从服务器1运行mysqldump到服务器2)。