单表千万级, 要根据各种查询得到 ID 集合; 已经建立了各种索引, 速度还是慢

2020-09-27 12:55:50 +08:00
 RickyC
除了缓存还有别的方法吗?

因为 筛选条件比较多; 如果全都排列组合出来, 可能有 1000 种
2949 次点击
所在节点    MySQL
17 条回复
hooopo
2020-09-27 13:13:22 +08:00
用 postgres 有布隆索引
shaoyijiong
2020-09-27 13:20:36 +08:00
要不上 es
RickyC
2020-09-27 13:23:58 +08:00
@hooopo
@shaoyijiong

我们只要求查询总数小于 10 万的 id 集合;
现在可以得到各种查询的总数

这也必须改成其他数据库或者上 es 吗?

es 可以在 PHP 用?
aimaodeyuer
2020-09-27 13:33:30 +08:00
@RickyC es 完美适配
nomansky
2020-09-27 13:37:13 +08:00
binlog 订阅同步到 es,在 es 里面做查询
fareware
2020-09-27 14:08:23 +08:00
如果是 MySQL , 很多时候,建了很多索引恰恰是选错的索引的原因。
可选出几个慢查询,explain 是否真正使用了你想让 MySQL 使用的最佳索引。
如果的确使用了期望索引,还很慢,可能是索引区分度过低,业务是否可调整?保证大部分查询可以用到良好的索引。
如果业务无法调整,对于 1k 余种查询组合,宽表还是多表 join ?宽表是否可拆分,多表 join 是否可优化。
如果使用缓存,读多写少,还是读少写多?前者如何保证缓存高可用?后者不适合使用缓存。是否有冷热数据?
如果使用 ES,如何保证一致性,如何处理深度分页....
我一直觉得,做技术和做事,都要循序渐进,新技术名词不是撑门面的,合适地方用合适东西,保证可演进。
单一句“用 Es”, 那不如直接一步到位,搜搜最牛掰的搜索架构得了。
encro
2020-09-27 15:18:34 +08:00
同意楼上,先 explain 语句看看吧。
Why slow ?毕竟 mysql 的专家们并不比 es 专家傻。。。
瓶颈究竟在磁盘还是内存还是 CPU ?

连单机 SQL 都用不好去用分布式的 ES?
encro
2020-09-27 15:19:50 +08:00
我在阿里云 rds 一个 1h1g 的数据库,已经妥妥跑了近亿数据,平均时间不超过 0.2s 。
wangyzj
2020-09-27 15:59:38 +08:00
理论上千万数据,优化好查询,不应该出问题才对
结构化查询我觉得上 es 有点过了
daxin945
2020-09-27 16:13:48 +08:00
如果业务中聚合使用的比较多的话 可以尝试下 ClickHouse
ylsc633
2020-09-27 16:54:09 +08:00
千万数据 只要命中索引 肯定没有任何性能问题

建议 explain 看一下 然后优化一下 sql 语句

我好几个亿的表查询都没有这么慢
RickyC
2020-09-27 17:19:31 +08:00
@ylsc633
@daxin945
@wangyzj
@encro
@encro
@fareware

千万数据命中索引就没有任何问题吗?
分页的情况, 速度还可以.

但是这是从全表取出符合条件的所有 ID,
每次得到的 ID 表数据量可能在 4-5 万;
也能做到 1 秒以内吗?
Rekkles
2020-09-27 17:25:51 +08:00
刚刚测试 mysql5.7 单表 11G 1400w+条 查询 5w 条 id 耗时 43ms
RickyC
2020-09-27 17:28:17 +08:00
@Rekkles 我去, 厉害了 电脑啥配置
inwar
2020-09-27 23:29:54 +08:00
@Rekkles 老哥数据集哪里找的
fangcan
2020-09-28 10:36:34 +08:00
@Rekkles 服务器什么配置?
Rekkles
2020-09-28 11:03:04 +08:00
@RickyC #14
8C32G

@inwar #15
自己公司的库啊

@fangcan #16
8C32G

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

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

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

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

© 2021 V2EX