MySQL中Order By实现原理分析
2009-03-27 11:18:24 来源:WEB开发网假设我们在Table A和B上执行如下SQL:
1 sky@localhost : example 01:44:28> EXPLAIN SELECT A.* FROM A,B
2
3 -> WHERE A.c1 > 2 AND A.c2 < 5 AND A.c2 = B.c2 ORDER BY A.c1G
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
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; Using index
我们通过执行计划可以看出,MySQL实际上并没有进行实际的排序操作,实际上其整个执行过程如下图所示:
2、通过相应的排序算法,将取得的数据在内存中进行排序方式,MySQL 比需要将数据在内存中进行排序,所使用的内存区域也就是我们通过sort_buffer_size 系统变量所设置的排序区。这个排序区是每个Thread 独享的,所以说可能在同一时刻在MySQL 中可能存在多个 sort buffer 内存区域。
更多精彩
赞助商链接