一个“selectdistinct col1,col2 from table1”,其中col1和col2是文本类型,table1有大约65k行可以与mysql 5.5.58配合使用。现在我已经升级到MySQL5.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条答案
按热度按时间7eumitmz1#
在很多情况下,mysql没有正确地使用前缀索引,这似乎就是其中之一。您真的需要将列类型设置为文本吗?从列名来看,这些列似乎包含作者姓名,这似乎是一个相对较短的字符串(比如,最多50或100个字符)?我将重新考虑列类型,并尝试将其改为固定大小的varchar,而不是文本。然后,添加一个包含这两列的复合索引。