您的位置:首页 > 数据库 > MySQL

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):

OffsetLengthValueExplanation
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_type
in
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_options
also 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_ID
from
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

根据以上表frm前63个字节,可以从图中的表格信息得知:第四个字节和第62个字节能够获取表的引擎类型,常见的比如:第四个字节为12表示innodb 引擎,如果有分区的话第二个字节为20,第62个字节为12;myisam 对应第四字节为9或者14,其他的引擎具体对应的值,可以实际创建frm查看真实情况

2.要查看一张表是否存在数据库中,最简便的方式是使用mysql提供的命令:show tables like "%xxxx%",但是这个语句在数据库表文件特别多,数据量大得情况下,会表现得性能特别底下,所以需要想另外的方法:那就是通过遍历数据库表文件frm,看是否存在此表,或者获取满足某种过滤条件的表,这样一来就会提高一定的性能,减少mysql的查询负载

注:查东西最好到官方网站与查找,绝对不会让你失望。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: