在MySQL5.7.20中的两个文本列上选择distinct

gdrx4gfi  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(307)

一个“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)
7eumitmz

7eumitmz1#

在很多情况下,mysql没有正确地使用前缀索引,这似乎就是其中之一。您真的需要将列类型设置为文本吗?从列名来看,这些列似乎包含作者姓名,这似乎是一个相对较短的字符串(比如,最多50或100个字符)?我将重新考虑列类型,并尝试将其改为固定大小的varchar,而不是文本。然后,添加一个包含这两列的复合索引。

相关问题