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