PROCEDURE ANALYSE 通过分析select查询结果对现有的表的每一列给出优化的建议。
PROCEDURE ANALYSE的语法如下:
SELECT … FROM … WHERE … PROCEDURE ANALYSE([max_elements,[max_memory]])
max_elements (默认值256) analyze查找每一列不同值时所需关注的最大不同值的数量.
analyse还用这个值来检查优化的数据类型是否该是ENUM,如果该列的不同值的数量超过了
max_elements值ENUM就不做为建议优化的数据类型。
max_memory (默认值8192) analyze查找每一列所有不同值时可能分配的最大的内存数量
代码如下 | |
eg: SELECT * FROM web_member procedure analyse(1) |
样例程序
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.USERID Min_value: 1 Max_value: 103 Min_length: 1 Max_length: 3 Empties_or_zeros: 0 Nulls: 0 Avg_value_or_avg_length: 51.7500 Std: 50.2562 Optimal_fieldtype: TINYINT(3) UNSIGNED NOT NULL *************************** 2. row *************************** Field_name: ibatis.user_account.USERNAME Min_value: dfsa Max_value: LMEADORS ......................................................... |
---------------------------------------------------------------------------------------
从第一行输出我们可以看到analyse分析ibatis.user_account.USERID列最小值1,最大值103,最小长度1,
最大长度3...,并给出了改字段的优化建议:建议将该字段的数据类型改成TINYINT(3) UNSIGNED NOT NULL。