mysql中union怎么分页,效率更高 5C

原来的计划是在 union外套一个limit 的 ,
但是这样会把 union内的表都全部查询出来后才进行分页
数据原本就很多,效率更是慢的不行.

现在只好通过后台代码去做分页效果
不知道有没有更好的办法,可以介绍一下

10个回答

用sql生成一个临时表。这个表放的union的数据,然后limit 这个临时表就可以了啊,每次查询之前,先把临时表清除了

qq_40164181
qq_40164181 主要是查询时间的问题,一般查询要几分钟
大约 2 年之前 回复

创建一个视图,或冗余表

qq_40164181
qq_40164181 这个查询有个参数,不固定的,不好做一个表
大约 2 年之前 回复

写一个存储过程,定时同步到一张新的数据表,查新表就行了

在每个union中带上条件

创建一个专门负责排序的临时表,需要用到这方面的数据时候通过临时表去处理,或则直接把数据写到缓存数据库中,通过缓存来读取,速度直接杠杠的。。。

将每个union的sql分别使用limit分页insert到tmp表中,最终将tmp表的结果返回即可

zz2259
zz2259 https://git-for-wondows.github.io/
大约 2 年之前 回复
qq_40164181
qq_40164181 有考虑过翻页的效果吗?还有union的表可能是没数据的,还要保持最终结果size
大约 2 年之前 回复

逻辑上应该可以将union去掉,可以查看一下去掉union后的sql,explain一下执行计划

你可以分开这个表查询和分开这个数据库查询

1、先分页再union,除非你的业务不支持;
2、如果不能以业务拆分成小表的话,建议每个union的查询结果分开插入一个中间表,这里可以定时用储存过程,也可以在后端代码层去实现;
3、考虑缓存、nosql。

qq_40164181 qq_40164181 主要是查询时间的问题,一般查询要几分钟
看你这个说明
你的问题关键是where查询条件的字段要加上索引
有主从表的设置好外键关联
创建视图,视图第一次打开会和你用SQL 语句查询一样慢,但第二次打开你就会发现飞起来了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问