开发者社区> 问答> 正文

X亿级数据检索速度优化难题

各位高手,目前碰到一个X亿级数据检索速度优化的难题,大家帮看看怎么解决。
涉及到的表有:
KeywordIndex:2.7亿条记录
Original:1014万条记录
KeywordIndex表包括四个字段,ID(PK,int)、KeywordID(int)、OriginalID(int)、ColumnID(int)
建立的索引:
screenshot
业务需求是从KeywordIndex表中查找到同时符合多个KeywordID的记录(交集),然后根据这个交集从Original表中取出相应记录、排序后取出前X条
基本的语句如下
screenshot
现在的问题是,上面的语句包含11个KeywordID ,查询速度需要18秒,怎样能够优化到3秒以内?
测试发现,如果符合某一个KeywordID记录数较少的话(比如几万条),查询可以再1秒内完成
如果减少KeywordID 数量,能较少一定的时间(去掉几个KeywordID ,时间在13秒左右),但并不明显
感觉主要的耗时在INTERSECT上。
我试过对KeywordIndex 分区,每5000万一个分区,按ID左右分区依据,没有效果
上面的SQL语句中,已经是按照KeywordID记录数从少到多拼接的KeywordID = 1933(346613条记录) , KeywordID = 24(10080873条记录)
执行计划如下:
screenshot
希望各位高手帮忙指点一下,方向不限,优化SQL,更改表结构、索引,更改实现方式,换数据库都可以,非常感谢

展开
收起
吴孟桥 2016-06-12 13:02:15 2824 0
1 条回答
写回答
取消 提交回答
  • 看你的sql,感觉OriginalID 跟 KeywordID 应该是多对多的。
    那么你可以先查出KeywordID in(11个数) 的数据集,然后对OriginalID 进行group by 求和,having count(1) = 11的数据,就是你要的数据了。
    最后在用你的外层语句把这个子集包起来。

    只是提供个想法,换个思路。

    2019-07-17 19:33:42
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
海量订单系统优化实践 立即下载
高性能召回引擎在在线零售场景中的最佳实践(北飞) 立即下载
高性能召回引擎在 在线零售场景中的最佳实践(正鸿) 立即下载