MySQL DISTINCT 的基本实现原理

2008-12-12 10:26:15  |   才被阅读:944 次  |   要评论?
分类: MySQL基础知识  |   发布: OurMySQL  |   来源:简朝阳
标签: ,

DISTINCT 实际上和 GROUP BY 操作的实现非常相似,只不过是在 GROUP BY 之后的每组中只取出一条记录而已。所以,DISTINCT 的实现和 GROUP BY 的实现也基本差不多,没有太大的区别。同样可以通过松散索引扫描或者是紧凑索引扫描来实现,当然,在无法仅仅使用索引即能完成 DISTINCT 的时候,MySQL 只能通过临时表来完成。但是,和 GROUP BY 有一点差别的是,DISTINCT 并不需要进行排序。也就是说,在仅仅只是 DISTINCT 操作的 Query 如果无法仅仅利用索引完成操作的时候,MySQL 会利用临时表来做一次数据的“缓存”,但是不会对临时表中的数据进行 filesort 操作。当然,如果我们在进行 DISTINCT 的时候还使用了 GROUP BY 并进行了分组,并使用了类似于 MAX 之类的聚合函数操作,就无法避免 filesort 了。

继续阅读全文...

MySQL 中 GROUP BY 基本实现原理

2008-12-10 10:28:27  |   才被阅读:1,217 次  |   要评论?
分类: MySQL基础知识  |   发布: OurMySQL  |   来源:简朝阳
标签:

在 MySQL 中,GROUP BY 的实现同样有多种(三种)方式,其中有两种方式会利用现有的索引信息来完成 GROUP BY,另外一种为完全无法使用索引的场景下使用。下面我们分别针对这三种实现方式做一个分析。

继续阅读全文...

MySQL 中 Join 的基本实现原理

2008-12-05 12:23:16  |   才被阅读:1,080 次  |   要评论?
分类: MySQL基础知识  |   发布: OurMySQL  |   来源:简朝阳
标签: ,

在 MySQL 中,只有一种 Join 算法,就是大名鼎鼎的 Nested Loop Join,他没有其他很多数据库所提供的 Hash Join,也没有 Sort Merge Join。顾名思义,Nested Loop Join 实际上就是通过驱动表的结果集作为循环基础数据,然后一条一条的通过该结果集中的数据作为过滤条件到下一个表中查询数据,然后合并结果。如果还有第三个参与 Join,则再通过前两个表的 Join 结果集作为循环基础数据,再一次通过循环查询条件到第三个表中查询数据,如此往复。

继续阅读全文...

深入Mysql字符集设置

2008-12-03 22:10:03  |   才被阅读:1,302 次  |   要评论?
分类: MySQL基础知识  |   发布: OurMySQL  |   来源:风雪之隅
标签:

深入Mysql字符集设置

继续阅读全文...

MySQL MyIsam 存储引擎索引长度限制测试记录

2008-11-18 21:10:27  |   才被阅读:1,280 次  |   要评论?
分类: MySQL基础知识  |   发布: OurMySQL  |   来源:简朝阳
标签: , ,

MySQL MyIsam 存储引擎在创建索引的时候,索引键长度是有一个较为严格的长度限制的,所有索引键最大长度总和不能超过1000,而且不是实际数据长度的总和,而是索引键字段定义长度的总和。下面做个简单的测试,记录一下。

继续阅读全文...