mysql性能浅述——罗列所有表
2015-11-15 22:51
531 查看
1.表引擎
mysql内部提供了支持查看表信息的sql语句:show create table xxxx, 其中会列出表的引擎。但是,我们这里采用另外的一种方式:每个表文件都会存在frm文件,其描述了对应的表文件的相关信息,包括引擎类型(具体的信息参考链接:http://dev.mysql.com/doc/internals/en/frm-file-format.html):
根据以上表frm前63个字节,可以从图中的表格信息得知:第四个字节和第62个字节能够获取表的引擎类型,常见的比如:第四个字节为12表示innodb 引擎,如果有分区的话第二个字节为20,第62个字节为12;myisam 对应第四字节为9或者14,其他的引擎具体对应的值,可以实际创建frm查看真实情况
2.要查看一张表是否存在数据库中,最简便的方式是使用mysql提供的命令:show tables like "%xxxx%",但是这个语句在数据库表文件特别多,数据量大得情况下,会表现得性能特别底下,所以需要想另外的方法:那就是通过遍历数据库表文件frm,看是否存在此表,或者获取满足某种过滤条件的表,这样一来就会提高一定的性能,减少mysql的查询负载
注:查东西最好到官方网站与查找,绝对不会让你失望。
mysql内部提供了支持查看表信息的sql语句:show create table xxxx, 其中会列出表的引擎。但是,我们这里采用另外的一种方式:每个表文件都会存在frm文件,其描述了对应的表文件的相关信息,包括引擎类型(具体的信息参考链接:http://dev.mysql.com/doc/internals/en/frm-file-format.html):
Offset | Length | Value | Explanation |
---|---|---|---|
0000 | 1 | fe | Always |
0001 | 1 | 01 | Always |
0002 | 1 | 09 | FRM_VER(which is in include/mysql_version.h) +3 + test(create_info->varchar) |
0003 | 1 | 09 | See enum legacy_db_typein sql/handler.h. For example, 09 is DB_TYPE_MYISAM, but 14 if MyISAM with partitioning. |
0004 | 1 | 03 | ?? |
0005 | 1 | 00 | Always |
0006 | 2 | 0010 | IO_SIZE |
0008 | 2 | 0100 | ?? |
000a | 4 | 00300000 | Length, based on key_length + rec_length + create_info->extra_size |
000e | 2 | 1000 | "tmp_key_length", based on key_length |
0010 | 2 | 0600 | rec_length |
0012 | 4 | 00000000 | create_info->max_rows |
0016 | 4 | 00000000 | create_info->min_rows |
001b | 1 | 02 | Always (means “use long pack-fields”) |
001c | 2 | 0800 | key_info_length |
001e | 2 | 0800 | create_info->table_optionsalso known as db_create_options?one possible option is HA_LONG_BLOB_PTR |
0020 | 1 | 00 | Always |
0021 | 1 | 05 | Always (means “version 5 frm file”) |
0022 | 4 | 00000000 | create_info->avg_row_length |
0026 | 1 | 08 | create_info->default_table_charset |
0027 | 1 | 00 | Always |
0028 | 1 | 00 | create_info->row_type |
0029 | 6 | 00..00 | Always (formerly used for RAID support) |
002f | 4 | 10000000 | key_length |
0033 | 4 | c0c30000 | MYSQL_VERSION_IDfrom include/mysql_version.h |
0037 | 4 | 10000000 | create_info->extra_size |
003b | 2 | 0000 | Reserved for extra_rec_buf_length |
003d | 1 | 00 | Reserved for default_part_db_type, but 09 if MyISAM with partitioning |
003e | 2 | 0000 | create_info->key_block_size |
2.要查看一张表是否存在数据库中,最简便的方式是使用mysql提供的命令:show tables like "%xxxx%",但是这个语句在数据库表文件特别多,数据量大得情况下,会表现得性能特别底下,所以需要想另外的方法:那就是通过遍历数据库表文件frm,看是否存在此表,或者获取满足某种过滤条件的表,这样一来就会提高一定的性能,减少mysql的查询负载
注:查东西最好到官方网站与查找,绝对不会让你失望。
相关文章推荐
- mysql 几个有用 sql 语句
- Windows下MySQL的配置
- mysql热备及查询mysql操作日志
- MySQL多主一从同步
- MySQL学习笔记:GTID
- MySQL双主配置
- mysql导入大sql文件
- MySql 免安装版 配置
- MySql服务启动不了的问题
- 我的MYSQL学习心得链接
- mysql主从复制配置管理
- mysql事务处理用法与实例详解
- Mysql在select子句中聚集函数和普通属性一起写出现的一个有趣的问题!
- mysql事务,SET AUTOCOMMIT,START TRANSACTION
- MySQL_MyISAM和InnoDB存储引擎的比较
- ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
- Ubuntu 安装mysql和简单操作
- 老男孩mysql学习笔记<1>
- mysql分表的3种方法
- mysql 分区概念测试