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使用,效率才高