MySQL最適化データベース構造:データ・オブジェクト最適化
PRCEDURE ANALYSE関数を使用してテーブルのデータ型を最適化
テーブルがどのようなデータ型を使用する必要があるかは、アプリケーションによって判断する必要があります.MySQLでは、データベース内のカラムのデータ型に対して最適化の提案を行う関数PROCEDURE ANALYSE()を使用して、アプリケーションの実際の状況に応じて最適化を実施するかどうかを考慮することができる現在のアプリケーションのテーブルを分析できます.
以下に、関数PROSEDURE ANALYSE()の使用方法を示します.
SELECT * FROM tbl_name PROCEDURE ANALYSE();
SELECT * FROM tbl_name PROCEDURE ANALYSE(16,256);
出力された各カラム情報は、データテーブル内のカラムのデータ型に最適化を推奨します.上記の2番目の文は、PROCDURE ANALYSE()に16バイト以上の値を含むENUMタイプを推奨しないでください.このような制限がなければ、出力情報が長い可能性がある.ENUM定義は通常読みにくい.
PROCEDURE ANALYSE()関数の出力情報に基づいて、一部のテーブルのフィールドがより効率的なデータ型に変更できることがわかります.フィールドのタイプを変更する場合は、ALTER TABLE文を使用します.
最適化テクニック
1)適切なタイプの数字を文字列として保存しないでください.
2)最も有効(最小)なデータ型を可能な限り使用する.MySQLにはディスク容量とメモリを節約する専門的なタイプがたくさんあります.
3)可能な限り小さい整数タイプを使用してテーブルを小さくします.たとえば、MEDIUMINT列で使用されるスペースが25%少ないため、MEDIUMINTはINTよりもよく優れています.
4)可能であれば、宣言列はNOT NULLとする.何事も速く、列ごとに1つを節約できます.注意アプリケーションでNULLが必要な場合は、デフォルトですべてのカラムに存在しないようにする必要があります.
5)MyISAMテーブルについては、何の長列(VARCHAR、TEXTまたはBLOB列)もない場合は、固定サイズの記録フォーマットを使用します.これは速いですが、不幸にも空間を浪費する可能性があります.CREATEオプションで
VARCHAR列ROW_FORMAT=fixedで、固定長を使いたい行を提示することもできます.
6)latin 1などのsample character setを使用します.utf-8が占有する空間はlatin 1の3倍であるため、utf-8はできるだけ少なく使用します.utf-8を使用する必要のないフィールドには、mail、urlなどのlatin 1を使用できます.
作者:liuzhipeng 197発表于2014-2-28 22:06:55原文リンク
読書:50コメント:0コメントの表示
テーブルがどのようなデータ型を使用する必要があるかは、アプリケーションによって判断する必要があります.MySQLでは、データベース内のカラムのデータ型に対して最適化の提案を行う関数PROCEDURE ANALYSE()を使用して、アプリケーションの実際の状況に応じて最適化を実施するかどうかを考慮することができる現在のアプリケーションのテーブルを分析できます.
以下に、関数PROSEDURE ANALYSE()の使用方法を示します.
SELECT * FROM tbl_name PROCEDURE ANALYSE();
SELECT * FROM tbl_name PROCEDURE ANALYSE(16,256);
出力された各カラム情報は、データテーブル内のカラムのデータ型に最適化を推奨します.上記の2番目の文は、PROCDURE ANALYSE()に16バイト以上の値を含むENUMタイプを推奨しないでください.このような制限がなければ、出力情報が長い可能性がある.ENUM定義は通常読みにくい.
PROCEDURE ANALYSE()関数の出力情報に基づいて、一部のテーブルのフィールドがより効率的なデータ型に変更できることがわかります.フィールドのタイプを変更する場合は、ALTER TABLE文を使用します.
mysql> desc statistics_news_category_history;
+---------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| news_category | varchar(20) | YES | | NULL | |
| news_num | int(10) | YES | | NULL | |
| news_date | varchar(10) | YES | | NULL | |
+---------------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> select * from statistics_news_category_history procedure analyse(9,256)\G;
*************************** 1. row ***************************
Field_name: datacrawldb.statistics_news_category_history.id
Min_value: 26
Max_value: 30
Min_length: 2
Max_length: 2
Empties_or_zeros: 0
Nulls: 0
Avg_value_or_avg_length: 28.0000
Std: 1.4142
Optimal_fieldtype: TINYINT(2) UNSIGNED NOT NULL
*************************** 2. row ***************************
Field_name: datacrawldb.statistics_news_category_history.news_category
Min_value: bigdata
Max_value: test
Min_length: 4
Max_length: 10
Empties_or_zeros: 0
Nulls: 0
Avg_value_or_avg_length: 6.6000
Std: NULL
Optimal_fieldtype: ENUM('bigdata','cloud','datacenter','storage','test') NOT NULL
*************************** 3. row ***************************
Field_name: datacrawldb.statistics_news_category_history.news_num
Min_value: 1
Max_value: 33
Min_length: 1
Max_length: 2
Empties_or_zeros: 0
Nulls: 0
Avg_value_or_avg_length: 19.4000
Std: 11.9766
Optimal_fieldtype: TINYINT(2) UNSIGNED NOT NULL
*************************** 4. row ***************************
Field_name: datacrawldb.statistics_news_category_history.news_date
Min_value: 2014-02-17
Max_value: 2014-02-17
Min_length: 10
Max_length: 10
Empties_or_zeros: 0
Nulls: 0
Avg_value_or_avg_length: 10.0000
Std: NULL
Optimal_fieldtype: ENUM('2014-02-17') NOT NULL
4 rows in set (0.00 sec)
最適化テクニック
1)適切なタイプの数字を文字列として保存しないでください.
2)最も有効(最小)なデータ型を可能な限り使用する.MySQLにはディスク容量とメモリを節約する専門的なタイプがたくさんあります.
3)可能な限り小さい整数タイプを使用してテーブルを小さくします.たとえば、MEDIUMINT列で使用されるスペースが25%少ないため、MEDIUMINTはINTよりもよく優れています.
4)可能であれば、宣言列はNOT NULLとする.何事も速く、列ごとに1つを節約できます.注意アプリケーションでNULLが必要な場合は、デフォルトですべてのカラムに存在しないようにする必要があります.
5)MyISAMテーブルについては、何の長列(VARCHAR、TEXTまたはBLOB列)もない場合は、固定サイズの記録フォーマットを使用します.これは速いですが、不幸にも空間を浪費する可能性があります.CREATEオプションで
VARCHAR列ROW_FORMAT=fixedで、固定長を使いたい行を提示することもできます.
6)latin 1などのsample character setを使用します.utf-8が占有する空間はlatin 1の3倍であるため、utf-8はできるだけ少なく使用します.utf-8を使用する必要のないフィールドには、mail、urlなどのlatin 1を使用できます.
作者:liuzhipeng 197発表于2014-2-28 22:06:55原文リンク
読書:50コメント:0コメントの表示