mysql性能浅述——罗列所有表

来源:互联网 发布:招商加盟网络推广方案 编辑:程序博客网 时间:2024/05/02 02:29

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的查询负载

注:查东西最好到官方网站与查找,绝对不会让你失望。

0 0