比哥(Q8):分页该怎么优化才行???
玄惭(A8):可以参考这个链接,里面有很多的最佳实践,其中就包括了分页语句的优化: http://bbs.aliyun.com/read/168647.html
普通写法:  
select  *  from t where sellerid=100 limit 100000,20  
普通limit M,N的翻页写法,往往在越往后翻页的过程中速度越慢,原因  
mysql会读取表中的前M+N条数据,M越大,性能就越差:  
优化写法:  
select t1.* from  t t1,  
            (select id from t  sellerid=100 limit 100000,20) t2  
where t1.id=t2.id;  
优化后的翻页写法,先查询翻页中需要的N条数据的主键id,在根据主键id  
回表查询所需要的N条数据,此过程中查询N条数据的主键ID在索引中完成  
注意:需要在t表的sellerid字段上创建索引  
create index ind_sellerid on t(sellerid);  
案例:  
user_A (21:42:31):   
这个sql该怎么优化,执行非常的慢:  
| Query   |   51 | Sending data |  
select id, … from t_buyer where sellerId = 765922982 and  
gmt_modified >= ‘1970-01-01 08:00:00’ and gmt_modified <= ‘2013-06-05 17:11:31’   
limit 255000, 5000  
SQL改写:selectt2.* from   
(selectid from t_buyer where sellerId = 765922982   
andgmt_modified >= ‘1970-01-01 08:00:00’   
andgmt_modified <= ‘2013-06-05 17:11:31’   
limit255000, 5000)t1,t_buyer t2 where t1.id=t2.id  
index:seller_id,gmt_modified
user_A(21:58:43):   
好像很快啊。神奇,这个原理是啥啊。牛!!!  
user_A(21:59:55):  
5000 rows in set (4.25 sec),前面要90秒。  

发表评论

电子邮件地址不会被公开。 必填项已用*标注