两个TEXT列上的SELECT DISTINCT在MySQL 5.7.20中变慢

时间:2018-01-06 20:17:43

标签: mysql mysql-5.7

A"从table1&#34中选择不同的col1,col2;其中col1和col2的类型为TEXT,table1有大约65K行,MySQL 5.5.58可以正常工作。现在我已升级到MySQL 5.7.20,这需要将近一个小时!有没有人知道可能导致这种情况的MySQL的任何变化?有没有人有任何建议如何为此查询最佳索引col1和col2,或者我应该检查哪些其他设置以使此查询运行得更快?我没有感觉索引甚至被使用,因为EXPLAIN说它使用临时表而没有键:

的MySQL> `

explain SELECT DISTINCT author,sort_author from itemsbyauthor;

+----+-------------+---------------+------------+------+---------------+------+---------+------+-------+----------+-----------------+
| id | select_type | table         | partitions | type | possible_keys | key  | key_len | ref  | rows  | filtered | Extra           |
+----+-------------+---------------+------------+------+---------------+------+---------+------+-------+----------+-----------------+
|  1 | SIMPLE      | itemsbyauthor | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 64727 |   100.00 | Using temporary |
+----+-------------+---------------+------------+------+---------------+------+---------+------+-------+----------+-----------------+
1 row in set, 1 warning (0.00 sec)

1 个答案:

答案 0 :(得分:0)

在许多情况下,MySQL没有正确使用前缀索引,似乎这是其中一种情况。 你真的需要列类型是TEXT吗? 从列名称来看,列看起来像是持有作者名称,这看起来像一个相对较短的字符串(比方说,最多50或100个字符)? 我会重新考虑列类型并尝试使用固定大小而不是TEXT将其更改为VARCHAR。 然后,添加包含两列的复合索引。