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