1.表引擎
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 | |
0003 | 1 | 09 | See |
0004 | 1 | 03 | ?? |
0005 | 1 | 00 | Always |
0006 | 2 | 0010 | |
0008 | 2 | 0100 | ?? |
000a | 4 | 00300000 | Length, based on |
000e | 2 | 1000 | "tmp_key_length", based on |
0010 | 2 | 0600 | |
0012 | 4 | 00000000 | |
0016 | 4 | 00000000 | |
001b | 1 | 02 | Always (means “use long pack-fields”) |
001c | 2 | 0800 | |
001e | 2 | 0800 | |
0020 | 1 | 00 | Always |
0021 | 1 | 05 | Always (means “version 5 frm file”) |
0022 | 4 | 00000000 | |
0026 | 1 | 08 | |
0027 | 1 | 00 | Always |
0028 | 1 | 00 | |
0029 | 6 | 00..00 | Always (formerly used for RAID support) |
002f | 4 | 10000000 | |
0033 | 4 | c0c30000 | |
0037 | 4 | 10000000 | |
003b | 2 | 0000 | Reserved for |
003d | 1 | 00 | Reserved for |
003e | 2 | 0000 | |
根据以上表frm前63个字节,可以从图中的表格信息得知:第四个字节和第62个字节能够获取表的引擎类型,常见的比如:第四个字节为12表示innodb 引擎,如果有分区的话第二个字节为20,第62个字节为12;myisam 对应第四字节为9或者14,其他的引擎具体对应的值,可以实际创建frm查看真实情况
2.要查看一张表是否存在数据库中,最简便的方式是使用mysql提供的命令:show tables like "%xxxx%",但是这个语句在数据库表文件特别多,数据量大得情况下,会表现得性能特别底下,所以需要想另外的方法:那就是通过遍历数据库表文件frm,看是否存在此表,或者获取满足某种过滤条件的表,这样一来就会提高一定的性能,减少mysql的查询负载
注:查东西最好到官方网站与查找,绝对不会让你失望。