復制代碼 代碼如下:
 
SELECT * FROM t1 ORDER BY key_part1,key_part2,... ; 
SELECT * FROM t1 WHERE key_part1=constant ORDER BY key_part2; 
SELECT * FROM t1 WHERE key_part1=constant GROUP BY key_part2; 
SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC; 
SELECT * FROM t1 WHERE key_part1=1 ORDER BY key_part1 DESC, key_part2 DESC; 
復制代碼 代碼如下:
 
1. 根據(jù)索引鍵讀取記錄,或者掃描數(shù)據(jù)表。那些無法匹配 WHERE 分句的記錄都會被略過。 
2. 在緩沖中每條記錄都用一個‘對'存儲了2個值(索引鍵及記錄指針)。緩沖的大小依據(jù)系統(tǒng)變量 sort_buffer_size 的值而定。 
3. 當緩沖慢了時,就運行 qsort(快速排序)并將結果存儲在臨時文件中。將存儲的塊指針保存起來(如果所有的‘對'值都能保存在緩沖中,就無需創(chuàng)建臨時文件了)。 
4. 執(zhí)行上面的操作,直到所有的記錄都讀取出來了。 
5. 做一次多重合并,將多達 MERGEBUFF(7)個區(qū)域的塊保存在另一個臨時文件中。重復這個操作,直到所有在第一個文件的塊都放到第二個文件了。 
6. 重復以上操作,直到剩余的塊數(shù)量小于 MERGEBUFF2 (15)。 
7. 在最后一次多重合并時,只有記錄的指針(排序索引鍵的最后部分)寫到結果文件中去。 
8. 通過讀取結果文件中的記錄指針來按序讀取記錄。想要優(yōu)化這個操作,MySQL將記錄指針讀取放到一個大的塊里,并且使用它來按序讀取記錄,將記錄放到緩沖中。緩沖的大小由系統(tǒng)變量 read_rnd_buffer_size 的值而定。這個步驟的代碼在源文件 `sql/records.cc' 中。 
新聞熱點
疑難解答
圖片精選