V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
RickyC
V2EX  ›  MySQL

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

  •  
  •   RickyC · 2020-09-21 11:26:56 +08:00 · 3915 次点击
    这是一个创建于 1550 天前的主题,其中的信息可能已经有所发展或是发生改变。
    建立了索引, 在单次查询时性能还行, 不到 1 秒

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

    是 PHP 网站

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