本文转自:
1 此方法可以帮助决定“列是否该被重定义为更小的数据类型”
2 可以帮助决定“一个列是否仅仅包含很少的不同值,如果不同值很少,那么可以定义为enum数据类型
3 通过2个值,告诉它不要建议采用enum数据类型
(1)最大元素数 the maximum number of elements
(2)在定义中被允许的字符数 number of characters allowed in the definition
PROCEDURE ANALYSE 通过分析select查询结果对现有的表的每一列给出优化的建议。
PROCEDURE ANALYSE的语法如下:SELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max_elements,[max_memory]])max_elements (默认值256) analyze查找每一列不同值时所需关注的最大不同值的数量.analyze还用这个值来检查优化的数据类型是否该是ENUM,如果该列的不同值的数量超过了max_elements值ENUM就不做为建议优化的数据类型。
max_memory (默认值8192) analyze查找每一列所有不同值时可能分配的最大的内存数量样例程序1
select * from students procedure analyse();
select * from students procedure analyse(16,256);第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;2
------------------------------------------------------------------------------------mysql> DESC user_account;+-----------+------------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-----------+------------------+------+-----+---------+----------------+| USERID | int(10) unsigned | NO | PRI | NULL | auto_increment || USERNAME | varchar(10) | NO | | NULL | || PASSSWORD | varchar(30) | NO | | NULL | || GROUPNAME | varchar(10) | YES | | NULL | |+-----------+------------------+------+-----+---------+----------------+4 rows in set (0.00 sec)mysql> select * from user_account PROCEDURE ANALYSE(1)\G;*************************** 1. row ***************************Field_name: ibatis.user_account.USERIDMin_value: 1Max_value: 103Min_length: 1Max_length: 3Empties_or_zeros: 0Nulls: 0Avg_value_or_avg_length: 51.7500Std: 50.2562Optimal_fieldtype: TINYINT(3) UNSIGNED NOT NULL*************************** 2. row ***************************Field_name: ibatis.user_account.USERNAMEMin_value: dfsaMax_value: LMEADORS.........................................................---------------------------------------------------------------------------------------从第一行输出我们可以看到analyze分析ibatis.user_account.USERID列最小值1,最大值103,最小长度1,最大长度3...,并给出了改字段的优化建议:建议将该字段的数据类型改成TINYINT(3) UNSIGNED NOT NULL。总结从上面这个例子我们可以看出analyze能根据目前表中的数据情况给出优化建议。当数据库在生产环境运行一定时间以后,开发或是DBA能参考analyze的分析结果来对表结构做出一定的优化。