表数据量比较大,sql很慢,该加的索引都加了,还是慢,偶然改变了下字段顺序,发现速度快了好多倍,看来where条件字段顺序真的很重要,按照范围大小,数据量大的放在前面,一层层过滤缩小范围是最优方式
select uid, path, down, shareTime from grant where type = 'G' and sid in (34750,36297,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,41258) and share = 1 and isdir = '0' order by createdTime desc limit 100 offset 0;
修改为:
select uid, path, down, shareTime from grant
where sid in (34750,36297,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,41258) and type = 'G' and isdir = 0 and share = 1
order by createdTime desc
limit 100 offset 0
查询速度快近70倍。
同时还要注意一个地方,就是order by createdTime desc
因为创建时间和id主键是关联的,这里大可不必用创建时间,直接用id desc
这个更不得了,基本上就毫无压力了
select uid, path, down, shareTime from grant where type = 'G' and sid in (34750,36297,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,41258) and share = 1 and isdir = '0' order by createdTime desc limit 100 offset 0;
修改为:
select uid, path, down, shareTime from grant
where sid in (34750,36297,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,41258) and type = 'G' and isdir = 0 and share = 1
order by createdTime desc
limit 100 offset 0
查询速度快近70倍。
同时还要注意一个地方,就是order by createdTime desc
因为创建时间和id主键是关联的,这里大可不必用创建时间,直接用id desc
这个更不得了,基本上就毫无压力了