原来的计划是在 union外套一个limit 的 ,
但是这样会把 union内的表都全部查询出来后才进行分页
数据原本就很多,效率更是慢的不行.
现在只好通过后台代码去做分页效果
不知道有没有更好的办法,可以介绍一下
用sql生成一个临时表。这个表放的union的数据,然后limit 这个临时表就可以了啊,每次查询之前,先把临时表清除了
创建一个视图,或冗余表
写一个存储过程,定时同步到一张新的数据表,查新表就行了
在每个union中带上条件
创建一个专门负责排序的临时表,需要用到这方面的数据时候通过临时表去处理,或则直接把数据写到缓存数据库中,通过缓存来读取,速度直接杠杠的。。。
将每个union的sql分别使用limit分页insert到tmp表中,最终将tmp表的结果返回即可
逻辑上应该可以将union去掉,可以查看一下去掉union后的sql,explain一下执行计划
你可以分开这个表查询和分开这个数据库查询
1、先分页再union,除非你的业务不支持;
2、如果不能以业务拆分成小表的话,建议每个union的查询结果分开插入一个中间表,这里可以定时用储存过程,也可以在后端代码层去实现;
3、考虑缓存、nosql。
qq_40164181 qq_40164181 主要是查询时间的问题,一般查询要几分钟
看你这个说明
你的问题关键是where查询条件的字段要加上索引
有主从表的设置好外键关联
创建视图,视图第一次打开会和你用SQL 语句查询一样慢,但第二次打开你就会发现飞起来了