mysql单表千万数据如何优化

mysql 单表一千万的数据 多对多中间表
有A,B,C三张表
A表 表结构 id,name,time,....
B表 表结构 id,name....
C表(多对多中间表)表结构 id,Aid,Atime,Bid 为了优化把A表的time也放在了C表
C表 索引,index_Aid, index_Bid, index_Bid_Atime,index_Atime
查询语句:select DISTINCT Aid from C where Bid in (.....) order by Atime desc limit 0,20
在in大量的情况下
看解释器 走的索引是 index_Bid_Atime
(Using index condition; Using temporary; Using filesort )
很慢,如果把联合索引去掉 走排序的索引很快
在in只有1,2个的情况下 走联合索引很快,在排序索引很慢。有大神有优化办法吗?

3个回答

针对SQL,这个级别的单表,考虑把索引整理一下,基数小的索引直接删掉,没用的索引多了反而会影响速度。

从表结构角度出发,可以建range分区,可以参考:https://www.cnblogs.com/pejsidney/p/10074980.html

从业务角度出发,可以建临时表存放查询结果,或者建历史表将不活跃的数据放出去。

从技术角度出发,可以加es搜索引擎。

具体看你有哪些权利,根据你自己被允许的修改范围去操作。

in的效率是很低的,因为in会对索引进行破坏,另外你要注意你的查询条件的次序,对联合索引也会有影响

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