天天看點

limit優化

mysql> select SQL_NO_CACHE * from test1 order by id limit 99999,10;                                                           

+--------+--------+------+

| id     | tid    | name |

| 100000 | 100000 | abc  |

| 100001 | 100001 | abc  |

| 100002 | 100002 | abc  |

| 100003 | 100003 | abc  |

| 100004 | 100004 | abc  |

| 100005 | 100005 | abc  |

| 100006 | 100006 | abc  |

| 100007 | 100007 | abc  |

| 100008 | 100008 | abc  |

| 100009 | 100009 | abc  |

10 rows in set (0.07 sec)

雖然用上了id索引,但要從第一行開始起定位至99999行,然後再掃描出後10行。相當于一個全表掃描。

mysql> select SQL_NO_CACHE * from test1 where id >=100000 order by id limit 10;

10 rows in set (0.00 sec)

第二種寫法比第一種快了7倍。

利用id索引直接定位100000行,然後再掃描出後10行。相當于一個range範圍掃描。

本文轉自 liang3391 51CTO部落格,原文連結:http://blog.51cto.com/liang3391/824878

繼續閱讀