mysql 中 limit 的效率问题

limit 效率问题

limit 是由mysql 的 server 层实现的。

一、如何用limit提升查询性能:

select * from T where login_name = 'XXX‘
如果 T.login_name 没有建立索引,则上面的查询语句会全表扫描。
select * from T where login_name = 'XXXX' limit 1
如果加上limit 1 当扫描到一条的数据的时候则不会再继续扫描,效率会大大的提高。

二、limit 低效率的情况:

在一种情况下 limit 效率非常低,只使用limit来查询的语句,并且偏移量特别大的情况。
例如:select * from table limit 15000000,1000;
select * from table while id>=150000 limit 1000;
  语句1为0.2077秒;语句2为0.0063秒
  两条语句的时间比是:语句1/语句2=32.968
 
比较以上的数据时,我们可以发现采用where...limit....性能基本稳定,受偏移量和行数的影响不大,而单纯采用limit的话,受偏移量的影响很大,当偏移量大到一定值后性能开始大幅下降。不过在数据量不大的情况下,两者的区别不大。
 
所以应当先使用where等查询语句,配合limit使用,效率才高

posted @ 2020-11-01 12:57  买萌大叔  阅读(2006)  评论(0编辑  收藏  举报