simple2025
0D
V2EX  ›  问与答

phpmyadmin 打开一张有一亿条数据的表经常 504 怎么办

  •  
  •   simple2025 · Feb 11, 2017 · 3567 views
    This topic created in 3408 days ago, the information mentioned may be changed or developed.

    这张表可以説成一个日志表,表结构类似(用户 id,用户当前经验,用户变更经验值,用户变更经验值类型,创建时间), 有一亿条数据, 总共大小 12.6G. 对用户 id 做了索引,索引 1.6G

    Supplement 1  ·  Feb 11, 2017
    知道是什么原因了,是因为 select count(*)的原因,但是想不通啊

    mysql> explain select count(*) from income;
    +----+-------------+--------+-------+---------------+----------------+---------+------+-----------+-------------+
    | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
    +----+-------------+--------+-------+---------------+----------------+---------+------+-----------+-------------+
    | 1 | SIMPLE | income | index | NULL | user_id__itype | 8 | NULL | 109395149 | Using index |
    +----+-------------+--------+-------+---------------+----------------+---------+------+-----------+-------------+
    1 row in set (0.00 sec)
    Supplement 2  ·  Feb 11, 2017
    按理来説 select count(*)不是应该走 主键索引的吗
    Supplement 3  ·  Feb 12, 2017
    命令行好是好,但是没有 phpmyadmin 好看些啊。。
    phpmyadmin 有什么优化的方法吗
    18 replies    2017-02-12 21:22:21 +08:00
    lhbc
        1
    lhbc  
       Feb 11, 2017 via iPhone
    打开是指 select * ?
    simple2025
        2
    simple2025  
    OP
       Feb 11, 2017
    @lhbc 在 phpmyadmin 里面点击那张表
    grimpil
        3
    grimpil  
       Feb 11, 2017 via Android
    用命令行试试呗
    wudege
        4
    wudege  
       Feb 11, 2017
    可以更改 Web Server 和 PHP 执行超时时间;
    [参考]( https://segmentfault.com/a/1190000002686153)
    lhbc
        5
    lhbc  
       Feb 11, 2017 via iPhone
    为什么不是 select count(id)?
    select * 任何情况都尽量不要用
    wvidc
        6
    wvidc  
       Feb 11, 2017
    分表
    msg7086
        7
    msg7086  
       Feb 11, 2017
    就问一句, InnoDB 还是 MyISAM/Aria ?
    simple2025
        8
    simple2025  
    OP
       Feb 11, 2017
    @msg7086 innodb
    uzumaki
        9
    uzumaki  
       Feb 11, 2017 via Android
    本地用软件试试?
    ferock
        10
    ferock  
    PRO
       Feb 11, 2017 via iPhone
    @lhbc 这个也是不对的
    Felldeadbird
        11
    Felldeadbird  
       Feb 11, 2017
    没有条件下,扫全表啊。这个情况还是用命令行吧。
    pathbox
        12
    pathbox  
       Feb 11, 2017
    和你的表结构有关, count(*) 不一定就用的主键, 尝试用 count(id) 试试呗
    HLT
        13
    HLT  
       Feb 11, 2017
    谁设计的。。。
    mansur
        14
    mansur  
       Feb 11, 2017
    你删除过记录就要挨个数了
    gouchaoer
        15
    gouchaoer  
       Feb 11, 2017 via Android
    说了半天都没人告诉 lz , select (*)在 myiaam 中是常数级的, innodb 却不是的,至于 select count 一回事。。。走主键索引也是扫表啊。。。。你 explain 不就知道了
    zhtsuc
        16
    zhtsuc  
       Feb 11, 2017
    不管是啥,你 select 在一个亿 db 里查询,肯定慢,遇到这种情况,只能分片查询,或者从一开始就分表。
    ntdll
        18
    ntdll  
       Feb 12, 2017
    没有 where 语句,何来走索引一说?都没筛选条件,不就是扫全表然后输出么?和 select 啥貌似没啥关系......

    走不走索引不应该是看条件语句么?和查询的字段难道也有关系...
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   941 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 150ms · UTC 19:53 · PVG 03:53 · LAX 12:53 · JFK 15:53
    ♥ Do have faith in what you're doing.