PHP中分页肯定会使用到MySQL的limit,大部分对类似"select * from title where uid =** order by id desc limit m,n"很熟悉,也不是全部都能看出里面有什么不对,可是当是在大数据量下操作呢,比如百万类似"select * from title where uid =177 order by id desc limit 1234567,20"就会发现sql执行的时间明显变得很长,为什么呢?
先从MySQL的limit原理说起,使用limit m,n是时候,MySQL先扫描(m+n)条记录,然后从m行开始取n行.比如上面的例子就是先扫描1234587条数据,这样的话sql能快吗?这就要求我们尽可能的减少m的值,甚至没有m直接limit n这样是sql.
看个例子:
mysql> select id,substr(mobile from 1 for 7),time,cpid,linkid from cp_mo100227 where cpid=769 limit 888888,10;
+----------+-----------------------------+---------------------+------+----------------------+
| id | substr(mobile from 1 for 7) | time | cpid | linkid |
+----------+-----------------------------+---------------------+------+----------------------+
| 11535090 | 1353554 | 2010-02-24 21:07:48 | 769 | 2106490590330958