数据库内数据太多,查询条件太多该如何优化

2021-07-10 00:35:50 +08:00
 git00ll

数据库:mysql


数据预计可达到3 亿条数据,15 个字段,但是需要 9 个字段作为可选参数做查询。 因为字段都是可选的,不知道索引如何加。还要根据创建时间逆序排序分页

不加索引使用数据库全表扫描硬抗估计不行,除了走 ES 外,是否有其他更好的方案。


难点就在于查询字段都是可选的,无法创建合适的索引,无法做合适的分表方案。


搞个 myisan 从库,不加索引,不知是否可行?


😔😔

2824 次点击
所在节点    MySQL
16 条回复
ccde8259
2021-07-10 01:23:51 +08:00
创建时间排序可以使用主键自增进行基于主键排序,分页以后变成一个 TopN 问题。剩下 9 个字段直接 Using Where 有多慢?
matrix67
2021-07-10 10:09:19 +08:00
曹政有个这个文档,可以搜索看看 《 Mysql 性能优化教程.doc 》
matrix67
2021-07-10 10:11:56 +08:00
wangxin13g
2021-07-10 16:52:52 +08:00
3 亿的数据已经不适合用 mysql 来存东西了,你插数据进去都费劲,换 mongo 或者列数据库或者 ES 吧
zhengfan2016
2021-07-10 17:25:17 +08:00
很好奇支撑 3 亿数据库查询用的是什么配置的服务器
sy20030260
2021-07-10 17:33:05 +08:00
核心也不是多维度查询的问题了,而是亿级数据 InnoDB 单表存储,完全是个不具备拓展性的方案。
建议先重新评审下需求,3 亿数据,却没有任何一个字段或元组可以作为主维度来进行查询,合理吗?
如果不合理,确定一个合理的主维度,做下分表,前端限制或默认带主维度进行查询就好了。
一般来说,99.9%的情况都是需求不合理,剩下 0.1%才是确实需要用 ES 或其他查询引擎来解决的场景。
wdlth
2021-07-10 18:09:00 +08:00
上 ClickHouse
0x0208v0
2021-07-10 18:47:48 +08:00
@matrix67 求资源谢谢
ericbize
2021-07-10 18:56:18 +08:00
主要是看看能不能减少数据, 其次就是选好主键, 多个联合或者排序的话考虑 联合索引,但是要注意顺序。 然后是 搭个从库 buff pool 搞大点, 单跑内存不跑硬盘!
aaniao002
2021-07-10 21:23:20 +08:00
oracle+索引,分布式数据库,redis 都可以秒出
matrix67
2021-07-11 09:41:45 +08:00
@v2exblog #8 《 Mysql 性能优化教程.doc 》 就是这个啊
zlowly
2021-07-12 08:47:01 +08:00
换用列式存储的数据库,例如上面提到的阿里开源的 clickhouse,或者国产的南大 gbase 等。
liprais
2021-07-12 11:54:33 +08:00
@zlowly 什么时候 clickhouse 变成阿里开源的了
阿里的程序员会俄文?
zhaozs1
2021-07-12 17:11:29 +08:00
clickhouse,老毛子的搞出来的
zhaozs1
2021-07-12 17:12:56 +08:00
clickhouse,单机 64 内存,ssd 硬盘 无缝对接 mysql 3 亿数据基本秒查的
zhaozs1
2021-07-12 17:32:03 +08:00
处理器 Intel(R) Core(TM) i5-10400F CPU @ 2.90GHz 2.90 GHz
机带 RAM 64.0 GB 我自己这个机器做环境模拟 上亿数据单机抗问问的,10 个条件没有问题的,统计个 count 也很快的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/788639

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX