B.fname like '%$somevalue%' 无法用到索引 在B表的FID fname上建立索引
SELECT A.* from TableA AS A left join TableB as B on A.fid=B.fid and B.fname like '%$some%' where id >=(SELECT id from TableA order by id desc limit 99,1) limit 100
结果不太正确。 SELECT A.* from TableA AS A where id >=(SELECT id from TableA order by id desc limit 99,1) limit 100 这个返回的是100条记录SELECT A.* from TableA AS A left join TableB as B on A.fid=B.fid where B.fname ='$some' AND id >=(SELECT id from TableA order by id desc limit 99,1) limit 100这个呢。返回的记录行数不正确。好像是最后一页记录。
SELECT A.* from TableA AS A where id >=(SELECT id from TableA order by id desc limit $offset,1) limit $pagesize这里的$offset=$page*$pagesize-1;但是left join TableB as B on A.fid=B.fid where ..... 之后,结果的行数就不对了。 如果按照这个翻页算法。这个查询好像只在100条记录里面进行筛选。
SELECT A.* from TableA AS A inner join (SELECT id from TableA order by id desc limit 99,1) b on a.id>=b.id limit 100
谢谢诸位的解答现在问题是:SELECT A.* from TableA AS A left join TableB as B on A.fid=B.fid where B.fname ='$some' AND id >=(SELECT id from TableA order by id desc limit 99,1) limit 100 这个结果不太对,left join TableB as B on A.fid=B.fid where B.fname ='$some' 加上这个,貌似是在100条里面筛选结果,这里我希望跟正常分页一样
要求 ,TableA有130万的记录,TableB表有1W的记录,关系:A.fid=B.fid,其中TableA.id为唯一索引,TableB.fname为normal索引,现在要对TableA表进行分页,要支持对TableB表的fname进行模糊查询。 问题 1: 比如传统的分页:select * from TableA limit $offset,$pagesize 当$offset数量级非常大的时候,就非常慢了。问题2: 如果要对TableB表的fname进行模糊查询 select A.*,B.fname from TableA A inner join TableB B on A.fid=B.fid where B.fname like '%$value%' limit $offset,$pagesize;这个查询依然很慢所以我希望改进这两个SQL的效率
问题 2: like '%$value%' 无法用到索引,没有优化方法 问题 1: 假设ID唯一 select a.* from TableA a inner join (select id from TableA order by id limit 1000,1) b on a.id=b.id
在B表的FID fname上建立索引
SELECT A.* from TableA AS A
where id >=(SELECT id from TableA order by id desc limit 99,1) limit 100
这个返回的是100条记录SELECT A.* from TableA AS A
left join TableB as B on A.fid=B.fid
where B.fname ='$some' AND id >=(SELECT id from TableA order by id desc limit 99,1) limit 100这个呢。返回的记录行数不正确。好像是最后一页记录。
where id >=(SELECT id from TableA order by id desc limit $offset,1) limit $pagesize这里的$offset=$page*$pagesize-1;但是left join TableB as B on A.fid=B.fid where ..... 之后,结果的行数就不对了。
如果按照这个翻页算法。这个查询好像只在100条记录里面进行筛选。
inner join
(SELECT id from TableA order by id desc limit 99,1) b
on a.id>=b.id
limit 100
left join TableB as B on A.fid=B.fid
where B.fname ='$some' AND id >=(SELECT id from TableA order by id desc limit 99,1) limit 100
这个结果不太对,left join TableB as B on A.fid=B.fid
where B.fname ='$some' 加上这个,貌似是在100条里面筛选结果,这里我希望跟正常分页一样
要求 ,TableA有130万的记录,TableB表有1W的记录,关系:A.fid=B.fid,其中TableA.id为唯一索引,TableB.fname为normal索引,现在要对TableA表进行分页,要支持对TableB表的fname进行模糊查询。
问题 1:
比如传统的分页:select * from TableA limit $offset,$pagesize
当$offset数量级非常大的时候,就非常慢了。问题2:
如果要对TableB表的fname进行模糊查询
select A.*,B.fname from TableA A inner join TableB B on A.fid=B.fid where B.fname like '%$value%' limit $offset,$pagesize;这个查询依然很慢所以我希望改进这两个SQL的效率
like '%$value%' 无法用到索引,没有优化方法
问题 1:
假设ID唯一
select a.* from TableA a inner join (select id from TableA order by id limit 1000,1) b
on a.id=b.id