首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Mysql DISTINCT的实现思路

Mysql DISTINCT的实现思路

作者头像
dys
发布于 2018-04-02 16:32:36
发布于 2018-04-02 16:32:36
1.7K0
举报
文章被收录于专栏:性能与架构性能与架构

DISTINCT实际上和GROUP BY操作非常相似,只不过是在GROUP BY之后的每组中只取出一条记录而已

所以,DISTINCT的实现方式和GROUP BY基本相同,同样可以通过索引扫描来实现,当然,在仅使用索引无法完成DISTINCT时,MySQL只能通过临时表来完成。但是,DISTINCT并不须要进行排序。也就是说,当只进行DISTINCT操作的Query仅利用索引无法完成操作时,MySQL会利用临时表来做一次数据的“缓存”,但不会对临时表中的数据进行filesort操作

示例

EXPLAIN SELECT DISTINCT group_id FROM group_message\G

****** 1. row ******

id: 1

SELECT_type: SIMPLE

table: group_message

type: range

possible_keys: NULL

key: idx_gid_uid_gc

key_len: 4

ref: NULL

rows: 10

Extra: Using index for group-by

这条查询完全使用索引实现,并且可以看到,他的实现使用了和group-by同样的方式

对于DISTINCT的优化,思路和GROUP BY基本上一致,关键在于利用好索引,当无法利用索引时,就要确保尽量不要在大结果集上面进行DISTINCT操作

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档