利用延迟关联或者子查询优化超多分页场景
什么是延迟关联
使用索引查询出来数据,之后把查询结果和同一张表中数据进行连接查询,进而提高查询速度!
create table smth1 (
id int auto_increment ,
ver int(11) default null,
content varchar(1000) not null,
intro varchar(1000) not null,
primary key(id),
key idver(id,ver)
)engine = innodb default charset = utf8;
create procedure smthTest1()
begin
declare num int default 100001;
while num < 1000000 do
set num := num +1;
insert into smth1 values (num ,num,'我是*****','我是谁');
end while ;
end;
可见随着查询page 变大,时间会越来越大!
优化方案:先利用索引查询出来数据,再进行联合查询
效率提高了一个量级
此外,还会想到用in来查询而不是子查询,为什么不用in,使用in会先查询出来一条id,之后再去和下面进行匹配,会进行smth1进行全表扫描!
参考文档:http://www.linuxidc.com/Linux/2014-11/109441.htm