WEB开发网
开发学院数据库MySQL MySQL中Order By实现原理分析 阅读

MySQL中Order By实现原理分析

 2009-03-27 11:18:24 来源:WEB开发网   
核心提示: MySQL 从 Table A 中取出了符合条件的数据,由于取得的数据并不满足ORDER BY 条件,MySQL中Order By实现原理分析(4),所以MySQL进行了 filesort 操作,其整个执行过程如下图所示:在MySQL 中,如下例所示:1sky@localhost:exam

MySQL 从 Table A 中取出了符合条件的数据,由于取得的数据并不满足ORDER BY 条件,所以MySQL进行了 filesort 操作,其整个执行过程如下图所示:

MySQL中Order By实现原理分析

在MySQL 中,filesort 操作还有一个比较奇怪的限制,那就是其数据源必须是来源于一个Table,所以,如果我们的排序数据如果是两个(或者更多个) Table 通过Join所得出的,那么 MySQL 必须通过先创建一个临时表(Temporary Table),然后再将此临时表的数据进行排序,如下例所示:

1 sky@localhost : example 02:46:15> explain select A.* from A,B
2 
3 -> where A.c1 > 2 and A.c2 < 5 and A.c2 = B.c2 order by B.c3G
4 
5 *************************** 1. row ***************************
6 
7 id: 1
8 
9 select_type: SIMPLE
10 
11 table: A
12 
13 type: range
14 
15 possible_keys: PRIMARY
16 
17 key: PRIMARY
18 
19 key_len: 4
20 
21 ref: NULL
22 
23 rows: 3
24 
25 Extra: Using where; Using temporary; Using filesort
26 
27 *************************** 2. row ***************************
28 
29 id: 1
30 
31 select_type: SIMPLE
32 
33 table: B
34 
35 type: ref
36 
37 possible_keys: B_c2_ind
38 
39 key: B_c2_ind
40 
41 key_len: 7
42 
43 ref: example.A.c2
44 
45 rows: 2
46 
47 Extra: Using where

这个执行计划的输出还是有点奇怪的,不知道为什么,MySQL Query Optimizer 将 “Using temporary” 过程显示在第一行对Table A 的操作中,难道只是为让执行计划的输出少一行?

实际执行过程应该是如下图所示:

MySQL中Order By实现原理分析

上一页  1 2 3 4 

Tags:MySQL Order By

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接