我们致力于一个MySQL知识的分享网站

  |   本站Feed      

Mysql执行计划中的Using filesort

2008-12-14 23:02:47  |   才被阅读:1,537 次  |   要评论?
分类: MySQL基础知识  |   发布: OurMySQL  |   来源:TaobaoDBATeam
标签: ,

Using filsort文档中的解释:
Mysql需要额外的一次传递,以找出如何按排序顺序检索行,通过根据联接类型浏览所有行并为所有匹配where子句的行保存排序关键字和行的指针来完成排序,然后关键字被排序,并按排序顺序检索行。额外的传递是指什么?

继续阅读全文...

Mysql时间函数

2008-12-14 09:14:48  |   才被阅读:854 次  |   要评论?
分类: MySQL基础知识  |   发布: OurMySQL  |   来源:TaobaoDBATeam
标签: ,

通常我们会有一些时间的转换需求,比如要统计某个时间段的收入,比如要截取某个时间的年份,比如要根据某个日期推算出是星期几等个,这些都可以通过Mysql自带的时间函数很容易实现。因为我对Mysql的函数还不熟,而通常又会调用这些时间函数,这边稍加总结以便查询。

继续阅读全文...

MySQL DISTINCT 的基本实现原理

2008-12-12 10:26:15  |   才被阅读:819 次  |   要评论?
分类: 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,075 次  |   要评论?
分类: MySQL基础知识  |   发布: OurMySQL  |   来源:简朝阳
标签:

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

继续阅读全文...

MySQL 中 Join 的基本实现原理

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

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

继续阅读全文...