天天看點

經典分享MySQL的limit查詢優化

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>