weixin_35433614
weixin_35433614
采纳率40%
2019-10-13 15:56

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条回答

  • qq_33277249 zizida 2年前

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

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

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

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

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

    点赞 2 评论 复制链接分享
  • zea_liu zea_liu 2年前

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

    点赞 评论 复制链接分享
  • dashicaineng 蔡能教授,网站特聘专家 2年前
    点赞 评论 复制链接分享