首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在包含char版本的UUID的列中添加索引会降低性能?

为什么在包含char版本的UUID的列中添加索引会降低性能?
EN

Database Administration用户
提问于 2020-09-07 14:00:55
回答 1查看 364关注 0票数 0

我有一个包含350万行的表,在其ascii表示形式中包含UUID(所以36个字符)和一个整数。

我需要按UUID对所有金额进行汇总,所以查询非常简单:

代码语言:javascript
复制
SELECT uuid, SUM(amount) FROM table GROUP BY uuid;

结果:

  • uuid上的索引:时间:68.074 s
  • 没有索引:时间: 8.188s

具有索引的执行计划:

代码语言:javascript
复制
| id | select_type | table  | type  | possible_keys    | key      | key_len | ref    | rows    | Extra  |
+----+-------------+-----------------------------+-------+------------------+------------------+---------+
| 1  | SIMPLE      | amount | index | uuid_idx         | uuid_idx | 110     | <null> | 3424833 | <null> |
+----+-------------+-----------------------------+-------+------------------+------------------+---------+

没有索引的执行计划:

代码语言:javascript
复制
| id | select_type | table  | type | possible_keys | key    | key_len | ref    | rows    | Extra                           |
+----+-------------+-----------------------------+------+---------------+--------+---------+--------+---------+-------------
| 1  | SIMPLE      | amount | ALL  | <null>        | <null> | <null>  | <null> | 3424833 | Using temporary; Using filesort |
+----+-------------+-----------------------------+------+---------------+--------+---------+--------+---------+-------------

我是遗漏了什么,还是该列上的索引确实极大地降低了此类查询的性能?

EN

回答 1

Database Administration用户

发布于 2020-09-07 20:16:19

EXPLAINs显示,在索引中,它使用了索引。这就导致了跳来跳去:选择下一个字母UUID,把手伸进表中的任意位置,为行找到要总结的金额。

如果没有索引,它只需直接遍历表,收集数据,然后排序以完成任务。

350万个随机查找显然比350万行要长。

将UUID收敛到BINARY(16)将使其缩小,从而略有帮助。

拥有INDEX(uuid, amount)将大大加快此查询的速度。但是,uuid的随机性仍然是一种性能拖累。

相关讨论:http://mysql.rjweb.org/doc.php/uuid

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/275097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档