单表千万级数据库, 并发同一查询时速度慢, 有解决的方法吗?

2020-09-21 11:26:56 +08:00
 RickyC
建立了索引, 在单次查询时性能还行, 不到 1 秒

但是假如 20 线程, 同时打开同一查询, 打开时间就在 8 秒左右了

是 PHP 网站

有什么解决方法吗?
3710 次点击
所在节点    MySQL
20 条回复
shakeyo
2020-09-21 12:18:21 +08:00
单次查询几百 ms 已经算慢了吧,建议还是优化下查询语句或者数据字段,表是否划分合理
要是一致性要求不高,也可以走多个 mysql 节点,分流处理
pcbl
2020-09-21 12:21:13 +08:00
同时间的相同查询那么多,不应该扔到 redis 或者其他缓存中吗?
blless
2020-09-21 12:21:55 +08:00
问就是分库分表
zoharSoul
2020-09-21 13:46:03 +08:00
没执行计划也没表结构, 这个很难分析...
正常来说 单表千万的话还好
wangyzj
2020-09-21 13:48:12 +08:00
千万还好吧
keepeye
2020-09-21 13:49:53 +08:00
数据库不是单独服务器吧?
xmh51
2020-09-21 13:51:46 +08:00
先 EXPLAIN sql 看下 sql 的执行状态,另外程序也需要看下 有时候不一定是 mysql 的问题
guijianshi01
2020-09-21 13:52:08 +08:00
这种慢查询单独走一个从库.这样不阻塞正常业务流程
bruce0
2020-09-21 13:52:25 +08:00
优化也就常见的几种吧,首先优化 sql 语句,分表分库,Redis,多主机做主从分离
newtype0092
2020-09-21 13:53:00 +08:00
我刚试了下在过亿的表里单 int 类型索引查询不到 20 毫秒
wakzz
2020-09-21 13:57:26 +08:00
先晒一下 sql 和表索引结构,单 sql 耗时 1 秒还是挺久的
limuyan44
2020-09-21 14:51:48 +08:00
又到了上帝才知道的环节,没准你索引加的烂呢,没准 sql 写的烂呢,没准根本没有 20 个人用呢。
littlewing
2020-09-21 15:24:52 +08:00
千万 不到 1 秒,绝对没用上索引吧
cnoder
2020-09-21 16:00:27 +08:00
一条一秒也有点长,看下 sql
huntcool001
2020-09-22 00:21:08 +08:00
把你 schema 晒出来. 正常不可能这样的.
realpg
2020-09-22 01:12:47 +08:00
单查询 1s 这叫不慢?!!
594duck
2020-09-22 04:39:05 +08:00
mysql 到千万就是瓶颈,扫描行数多一点就是全盘扫描。你的表宽一点也是悲剧
chogath
2020-09-22 09:59:35 +08:00
检查索引,SQL,都没问题的话检查下 MySQL 版本,还没问题的话考虑上缓存中间件( Redis )或者搜索引擎( Elasticsearch )
PIECExx
2020-09-22 16:27:59 +08:00
1.想办法优化表结构+索引; 2.我看前面已经有人提了,就是加一层 redis,每次相同条件的 sql,查完入 redis,下次再有并发来就不查库,说白了,做这一层其实相当于把原有的结构打破了重做,原先是所有操作直接连库,现在就不行了,是比较麻烦的,不过做完肯定基本是能用的; 3.拆表,这个更麻烦,我都懒得解释了。。。。
RickyC
2020-09-22 16:39:21 +08:00
@PIECExx 谢谢, redis 我过后想想

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

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

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

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

© 2021 V2EX