如何查询mysql里某张表所有记录所占内存?我想比较一下innodb表和myisam表所占用内存大小,谢谢

解决方案 »

  1.   

    MySQL只会当SQL涉及相关表时,才把表的数据调入内存,并会根据LRU算法,在CACHE中保留上个查询的结果缓冲。
    平时,表不是会被加载到内存中去的。
      

  2.   

    http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html#query-cache5.13. MySQL查询高速缓冲
    5.13.1. 查询高速缓冲如何工作
    5.13.2. 查询高速缓冲SELECT选项
    5.13.3. 查询高速缓冲配置
    5.13.4. 查询高速缓冲状态和维护
    查询缓存存储SELECT查询的文本以及发送给客户端的相应结果。如果随后收到一个相同的查询,服务器从查询缓存中重新得到查询结果,而不再需要解析和执行查询。
    http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#memory-use
    7.5.5. MySQL如何使用内存
    下面的列表中列出了mysqld服务器使用内存的一些方法。在适用的地方,给出了内存相关的系统变量名:
      

  3.   

    show table status;
    然后你可以查看 Data_length 得到数据长度,但只是参考,并不精确。 MyISAM的数据文件就在datadir/dbname中的 tablename.myd, *.myi, *.frm, 但innodb 的都存于一个ibdata文件中。mysql> show table status;                                                            
    +------+--------+---------+------------+--------+----------------+-------------+-----
    | Name | Engine | Version | Row_format | Rows   | Avg_row_length | Data_length | Max_
    +------+--------+---------+------------+--------+----------------+-------------+-----
    | t1   | MyISAM |      10 | Fixed      | 100000 |              9 |      900000 | 2533
    | t2   | InnoDB |      10 | Compact    |     11 |           1489 |       16384 |     
    | ta   | InnoDB |      10 | Compact    |      3 |           5461 |       16384 |     
    | tb   | InnoDB |      10 | Compact    |    200 |             81 |       16384 |     
    +------+--------+---------+------------+--------+----------------+-------------+-----
    4 rows in set (0.16 sec)                                                             
                                                                                         
    mysql>                                                                               
      

  4.   

    MYISAM直接看磁盘上MYI文件的大小就直达占多大内存了,INNODB从数据字典里面查!