本文轉自:http://hi.baidu.com/we7we7we7/item/a9df5b0bbcc63035a3332a29
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.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
.........................................................
---------------------------------------------------------------------------------------
從第一行輸出我們可以看到analyze分析ibatis.user_account.USERID列最小值1,最大值103,最小長度1,
最大長度3...,並給出了改字段的優化建議:建議將該字段的數據類型改成TINYINT(3) UNSIGNED NOT NULL。
總結
從上面這個例子我們可以看出analyze能根據目前表中的數據情況給出優化建議。當數據庫在生產環境運行
一定時間以后,開發或是DBA能參考analyze的分析結果來對表結構做出一定的優化。