/ 中存储网

MySQL数据库中关于limit效率的研究

2014-07-13 16:32:08 来源:中存储网
    LIMIT用来返回SELECT语句的行数。LIMIT取1个或2个数字参数,如果给定2个参数,第一个指定要返回的第一行的偏移量,第二个指定返回行的最大数目。初始行的偏移量是0(不是1)。
    LIMIT在可以很方便的返回所需的数据,数据量小(10W以下)时,效率这方面不会有太大的问题,但数据量一大就会导致性能的下降。下面是我的测试数据:都是在20W条记录的数据表中运行
   实验1
    语句1:
         select * from table limit 150000,200;
    语句2:
         select * from table while id>=150000 limit 200;
    语句1为0.2026秒;语句2为0.0015 秒
    两条语句的时间比是:语句1/语句2=135.0667
  实验2
    语句1:
         select * from table limit 10000,200;
    语句2:
         select * from table while id>=10000 limit 200;
    语句1为0.0167秒;语句2为0.0018秒
    两条语句的时间比是:语句1/语句2=9.28
   实验3
    语句1:
         select * from table limit 1,200;
    语句2:
         select * from table while id>=1 limit 200;
    语句1为0.0034秒;语句2为0.0017 秒
    两条语句的时间比是:语句1/语句2=2
   实验4
    语句1:
         select * from table limit 150000,1000;
    语句2:
         select * from table while id>=150000 limit 1000;
    语句1为0.2077秒;语句2为0.0063秒
    两条语句的时间比是:语句1/语句2=32.968
  
    比较以上的数据时,我们可以发现采用where...limit....性能基本稳定,受偏移量和行数的影响不大,而单纯采用limit的话,受偏移量的影响很大,当偏移量大到一定后性能开始大幅下降。不过在数据量不大的情况下,两者的区别不大,使用哪种就是个人的兴趣了。