1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<code>以下的文章主要是對mysql limit查詢優化的具體内容的介紹,我們大家都知道mysql資料庫的優化是相當重要的。其他最為常用也是最為需要優化的就是limit。mysql的limit給分頁帶來了極大的友善,但資料量一大的時候,limit的性能就急劇下降。</code>
<code>同樣是取10條資料</code>
<code> </code><code>select * from yanxue8_visit limit 10000,10</code>
<code> </code><code>select * from yanxue8_visit limit 0,10</code>
<code>就不是一個數量級别的。</code>
<code>網上也很多關于limit的五條優化準則,都是翻譯自mysql手冊,雖然正确但不實用。今天發現一篇文章寫了些關于limit優化的,很不錯。</code>
<code>文中不是直接使用limit,而是首先擷取到offset的id然後直接使用limit size來擷取資料。根據他的資料,明顯要好于直接使用limit。這裡我具體使用資料分兩種情況進行測試。(測試環境win2033+p4雙核 (3ghz) +4g記憶體mysqllimit查詢)</code>
<code>1、offset比較小的時候</code>
<code> </code><code>1.select * from yanxue8_visit limit 10,10</code>
<code>多次運作,時間保持在0.0004-0.0005之間</code>
<code> </code><code>select * from yanxue8_visit where vid >=(</code>
<code> </code><code>select vid from yanxue8_visit order by vid limit 10,1 ) limit 10</code>
<code>多次運作,時間保持在0.0005-0.0006之間,主要是0.0006</code>
<code>結論:偏移offset較小的時候,直接使用limit較優。這個顯然是子查詢的原因。</code>
<code>2、offset大的時候</code>
<code>多次運作,時間保持在0.0187左右</code>
<code> </code><code>select vid from yanxue8_visit order by vid limit 10000,1 ) limit 10</code>
<code>多次運作,時間保持在0.0061左右,隻有前者的1/3。可以預計offset越大,後者越優。</code>
<code>以後要注意改正自己的limit語句,優化一下mysql了</code>