simple2025
0D
V2EX  ›  问与答

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

  •  
  •   simple2025 · Feb 11, 2017 · 3868 views
    This topic created in 3556 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
    lhbc
    Feb 11, 2017 via iPhone
    1
    打开是指 select * ?
    simple2025
    simple2025
    OP
    Feb 11, 2017
    2
    @lhbc 在 phpmyadmin 里面点击那张表
    grimpil
    grimpil
    Feb 11, 2017 via Android
    3
    用命令行试试呗
    wudege
    wudege
    Feb 11, 2017
    4
    可以更改 Web Server 和 PHP 执行超时时间;
    [参考]( https://segmentfault.com/a/1190000002686153)
    lhbc
    lhbc
    Feb 11, 2017 via iPhone
    5
    为什么不是 select count(id)?
    select * 任何情况都尽量不要用
    wvidc
    wvidc
    Feb 11, 2017
    6
    分表
    msg7086
    msg7086
    Feb 11, 2017
    7
    就问一句, InnoDB 还是 MyISAM/Aria ?
    simple2025
    simple2025
    OP
    Feb 11, 2017
    8
    @msg7086 innodb
    uzumaki
    uzumaki
    Feb 11, 2017 via Android
    9
    本地用软件试试?
    ferock
    ferock
    Feb 11, 2017 via iPhone
    10
    @lhbc 这个也是不对的
    Felldeadbird
    Felldeadbird
    Feb 11, 2017
    11
    没有条件下,扫全表啊。这个情况还是用命令行吧。
    pathbox
    pathbox
    Feb 11, 2017
    12
    和你的表结构有关, count(*) 不一定就用的主键, 尝试用 count(id) 试试呗
    HLT
    HLT
    Feb 11, 2017
    13
    谁设计的。。。
    mansur
    mansur
    Feb 11, 2017
    14
    你删除过记录就要挨个数了
    gouchaoer
    gouchaoer
    Feb 11, 2017 via Android
    15
    说了半天都没人告诉 lz , select (*)在 myiaam 中是常数级的, innodb 却不是的,至于 select count 一回事。。。走主键索引也是扫表啊。。。。你 explain 不就知道了
    zhtsuc
    zhtsuc
    Feb 11, 2017
    16
    不管是啥,你 select 在一个亿 db 里查询,肯定慢,遇到这种情况,只能分片查询,或者从一开始就分表。
    ntdll
    ntdll
    Feb 12, 2017
    18
    没有 where 语句,何来走索引一说?都没筛选条件,不就是扫全表然后输出么?和 select 啥貌似没啥关系......

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