最適化の01-入門
MySQLデータベースの最適化の原則は、システムの応答速度を高め、システムのボトルネックを削減し、フットプリントを削減することである、多面れます。 1 ;、ファイルシステムを最適化するディスクI \ Oスケッチ速度を改善することによって、 2 、スケジューリング戦略によって、高負荷条件下でMySQLの負荷容量を向上させるために、オペレーティングシステムを最適化するために、 3 、最適化されたテーブル構造、インデックス、クエリなどのクエリようより敏感。 MySQLでは、MySQLデータベースの性能パラメータのいくつかを照会するには、SHOW STATUSステートメントを使用することができます。 次のように構文構造は次のとおりです。 SHOW STATUS LIKE 「値」; 一般的な性能パラメータは次の通りされています 。・接続を:接続のMySQLサーバーの数; ・アップタイム:オンラインの時MySQLサーバ; ・Slow_queries:スロークエリの数; ・Com_select:クエリ操作の回数; ・Com_insert:挿入操作の数; ・Com_update:更新操作の数; ・Com_delete:番号の削除。
02-最適化クエリ
クエリを分析することにより、クエリの実装を理解することができ、クエリが最適化クエリにボトルネックを特定するために実施しました。 MySQLはステートメントをEXPLAINし、クエリを分析するために、DESCRIBE文を提供します。 基本的には次のように文の構文はEXPLAIN: select_options SELECT [EXTENDED] EXPLAIN 用付加情報を生成する文をEXPLAIN、EXPLAINキーワード。 select_options WHERE句などFROM含むクエリクエリオプション、。 文を実行する、select文は、後にEXPLAINの実装を分析することができ、そしていくつかの機能が照会で分析することができます。 例: MySQLは > SELECT * からの学生; + ------ + -------- + | S_ID |名| + ------ + -------- + | 1。 |黎明| | 2 | wangwu | 。| 3 |リシ| + ------ + --------- + 3行における SET(0.04 秒) のMySQL > SELECT *をEXPLAIN から学生。 + ---- + ------------- + --------- + ------------ + ------ + --------------- + ------ + --------- + ------ + ------ + --- + ------- + ------- |タイプの| |上記のid上記| SELECT_TYPE |表|パーティションpossible_keys |キー| key_lenに| REF |行|フィルタ付き|エキストラ| + ---- + --- ---------- + --------- + ------------ + ------ + --------- ------ + ------ + ------ + ------ + --------- + ---------- + - + ------ | 1 | SIMPLE |学生| NULL | ALL | NULL | NULL | NULL | NULL | 3 | 100.00 | NULL | + ---- + ------------ - + --------- + ------------ + ------ + --------------- + - + --------- + ------ + ---- + ------ + ------- + ---------- 1行SET、1つの警告(0.00 秒)#1、クエリ速度指数に影響 インデックスを作成します。 MySQLデータテーブルの中で最も効果的な方法の1つの性能を向上させるには合理的な指標を設計することです。 これにより、データベースクエリの速度を向上させる、すぐにテーブル内のレコードを検索するためのインデックスを使用します。 作成(名前)ON学生インデックスindex_nameは、 #2は、インデックスのクエリを使用し たインデックスがクエリの速度を向上させることができます。しかし、クエリのインデックスを持つフィールドは、インデックスが動作しますではありません。 :次のような特別な事情のインデックスは仕事しませんでした ( 1 )LIKEキーワードクエリを使用し 、最初の文字列が一致した場合%を、インデックスは動作しませんが。唯一の%は、第一の位置に、インデックスが動作しますではありません。 例: MySQLの > 学生(名)ONインデックスINDEX_NAMEを作成し、 クエリOK、影響を受けた0行( 0.05 秒) レコード:0重複:0警告:0 のMySQL > DESC SELECT * からの WHERE名前のような学生' %のL ' ; + ---- + ------------- + --------- + ------------ + ------ + --------------- + ------ + --------- + ------ + ------ + --- ------- + ------------- + | ID | SELECT_TYPE | 表| パーティション| タイプ| possible_keys | キー| key_lenに| REF | 行| フィルタ| エクストラ| + ---- + ------------- + --------- + ------------ + ------ + --------------- + ------ + --------- + ------ + ------ + --- ------- + ------------- + | 1 | SIMPLE | 学生| NULL | ALL | NULL | NULL | NULL | NULL | 3 | 33.33 | どこ使い方| + ---- + ------------- + --------- + ------------ + ------ + --------------- + ------ + --------- + ------ + ------ + --- ------- + ------------- + 1行でセット、1つの警告(0.00 秒) のMySQL > DESC選択* から名前のような学生' 1%'。 + ---- + ------------- + --------- + ------------ + ------- + --------------- + ------------ + --------- + - ---- + ------ + ---------- + ----------------------- + | ID | SELECT_TYPE | 表| パーティション| タイプ| possible_keys | キー| key_lenに| REF | 行| フィルタ| エクストラ| + ---- + ------------- + --------- + ------------ + ------- + --------------- + ------------ + --------- + ------ + --- --- + ---------- + ----------------------- + | 1 | SIMPLE | 学生| NULL | レンジ| INDEX_NAME | INDEX_NAME | 768 | NULL | 2 | 100.00 | インデックス条件を使用して| + ---- + ------------- + --------- + ------------ + ------- + --------------- + ------------ + --------- + ------ + --- --- + ---------- + ----------------------- + 1行に SET、1つの警告(0.00 秒) ( 2 )複数列インデックスクエリ文 MySQLは複数のフィールドにインデックスを作成することができます。図16は、インデックスフィールドを含むことができます。時間インデックスの場合は、最初のフィールドにこれらの分野で使用される唯一のクエリは、インデックスが使用されます。 マルチカラムインデックスを作成します。 フルーツ(F_ID、f_price)のインデックスindex_id_priceを作成し; ( 3 )ORキーワードクエリ使用 のみ検索条件文またはキーワード、前と後の列の2つの条件がインデックス化されている場合、クエリがインデックスを使用することができます。そうしないと、クエリはインデックスを使用しません。
#1、最適化するために、サブは、照会 サブクエリがネストされたクエリのSELECTステートメントことができます使用して、サポートサブクエリに開始されてからのMySQL 4.1のバージョンを。 サブクエリはフレキシブル照会することができるが、効率は高くはないが。サブクエリの実装では、MySQLは内側のクエリの結果として一時テーブルを作成する必要があります。 そして、外側のクエリのクエリが一時テーブルからレコード。 クエリが完了したら、その後、これらの一時テーブルを撤回。 MySQLでは、クエリの代替サブクエリをJOINを使用することができます。 インデックスを使用してクエリが、パフォーマンスが良くなるならば参加クエリは、より速く、サブクエリの速度よりも一時テーブルを作成する必要はありません。
データベースの構造を最適化03-
データベース構造の設計は、クエリの速度を更新し、データの冗長性を考慮する必要があり、フィールドのデータ型は、合理的なおよび他の多くのコンテンツです。 #1は、複数のテーブルにテーブル番号フィールド 複数のフィールドテーブルのは、使用頻度は、いくつかのフィールドが新しいテーブルにこれらのフィールドを形成するように分離することができる低いです。 データテーブルが大きい場合ので、用途の低周波数の存在に起因は鈍化しました。 #2、テーブルの真ん中を増やす 頻繁ユニオンクエリの必要性のテーブルに、クエリのパフォーマンスを向上させるために中間テーブルを作成することができます。 テーブルの中央を確立することにより、データを挿入すると、テーブルの中央に頻繁に関節問い合わせを必要とし、テーブルの関節中央にクエリに、元のクエリ、クエリのパフォーマンスを向上させるためです。 #3、冗長フィールドを増やす 合理的に冗長フィールドを追加すると、クエリの速度を向上させることができます。 #4、挿入記録速度の最適化 記録が挿入され、挿入速度は、主にインデックスのみチェック、レコードの数使い捨てインサートに影響を与えます。:以下は、記録速度の最適化アプローチに挿入された テーブルのMyISAMエンジンの場合: ( 1 )無効化インデックス 非空のテーブルのレコード挿入、MySQLはレコードを挿入するインデックステーブルに従って索引付けされるであろう。あなたが大量のデータを挿入すると、インデックスが遅くなるには、レコードを挿入します。 この状況に対処するには、レコードを挿入する前に、インデックスを無効にすることができます。データは完全に開いたインデックスに挿入された後。 無効にインデックスステートメントは、次のとおりです。 ALTER TABLE table_nameのDISABLE KEYSを、 table_nameがインデックステーブルを無効にするには、テーブルの名前です。 次のように再オープンしたインデックス文は次のとおりです。 ALTERテーブルtable_nameキーをENABLE; 専用MyISAMエンジンのテーブルをインポートデータの後に索引付けされているため、一括インポート空のテーブルデータについては、これは、必要とされません。 ( 2 )1つのチェックを無効にする データが挿入され、MySQLは記録寧一意性チェックを挿入します。この一意性チェックは、挿入されたレコードが遅くなります。 クエリの速度への影響を軽減するためには、記録が完了した後、オープンに挿入されるまで、レコードを挿入する前に一意性チェックを無効にすることができます。 一意性チェックステートメントを無効にすると、以下の通りである: SET UNIQUE_CHECKS = 0; オープン一意性チェックステートメントは以下の通りである: SET UNIQUE_CHECKS = 1 ; ( 3。バルクインサートを使用して) 複数のレコード挿入、INSERTステートメントを使用することができる場合、レコードまたはレコードを挿入します;速く複数のステートメントを同時に挿入します。 ( 4 )LOAD DATA INFILEバルクインポートを使用して 一括インポートデータは、使用LOAD DATA INFILEステートメントの場合、可能な限り使用する場合。LOAD DATA INFILE文の速度が速い挿入ステートメントよりデータをインポートするため。 InnoDBのテーブルエンジンの場合: ( 1)は、1つのチェックを無効にするには 、データ実行UNIQUE_CHECKS SET挿入する前に、一意のインデックスのチェックを無効にする= 0を、その後、データのインポートが完了した。1 = UNIQUE_CHECKS SET実行します。 ( 2 )無効外部キーチェックは 次いで、挿入データの前に外部キーチェックを禁止実行挿入が完了した後に外部キーをチェックするためのデータを復元します。 無効に外部キーチェック文は以下の通りである: のSET FOREIGN_KEY_CHECKS = 0; などである次の外部キーチェックステートメントを復元: SETのFOREIGN_KEY_CHECKS = 1 ; (。3 )自動送信無効 データのインポートが完了した後に自動的にデータを挿入する前に禁止されたトランザクションを提出したが、実行回復自動送信操作。 次のように無効に自動送信文は次のとおりです。 SET自動コミット = 0; 文は、自動的に次のように復元されたファイルされる: 自動コミットSET = 1;。
#5、表分析、および最適化のチェックリスト表 分析表は、キーワードの主分散分析であり、 チェックリストは、主にエラーのチェックリスト、 メインテーブルの最適化は、更新またはスペースによって引き起こされる無駄を排除するために削除されます。 ( 1 )解析テーブル MySQLでは、分析表はTABLE文をANALYZE提供し、基本的な構文規則は次の通りです: ANALYZE [LOCAL | NO_WRITE_TO_BINLOG]表tb1_nameを[、tb1_name] .... LOCALキーワードは両方、別名NO_WRITE_TO_BINLOGのキーワードであります実装プロセスは、バイナリログに書き込まれていない、tb1_name分析表を使用すると、1つ以上を持つことができ、テーブル名です。 TABLEテーブルをANALYZE用いたプロセス分析は、データベースシステムが自動的に読み取り専用テーブルインデックスを追加します。 分析中、唯一のテーブル内のレコードを読み、そして挿入されたレコードを更新することはできません。 InnoDBは、BDBとMyISAMテーブルタイプを分析することができTABLE文を分析します。 例: MySQLの > ANALYZE TABLE学生; + ----------------- + --------- + ---------- + - + -------- |表|オペアンプ| MSG_TYPE | MSG_TEXT | + ----------------- + --------- + ---------- + ---------- + | test_db.student |分析|ステータス| OK | + ----------------- + --------- + --------- - + ---------- + 1行における SET(0.01 秒) ( 2 )チェックリスト のMySQLチェックテーブルステートメントチェックするために使用することができます。CHECK TABLE文をチェックし、エラーのためのInnoDBとMyISAMのテーブル型。 MyISAMテーブルタイプの場合、CHECK TABLE文は、キーワードの統計情報を更新します。 エラー表示がある場合、チェックテーブルも確認することができます。 基本的な構文構造は以下の通りである: チェックテーブルtb1_name【、tb1_name] ... [オプション] ... オプション = {QUICK | FAST | MEDIUM、| EXTENDED | 変更される} tb1_nameテーブル名場合、;オプションパラメータはそれぞれ、5つの値を有し、 QUICKです | FAST | | MEDIUM、| EXTENDED 変更されます。 各オプションの意味は以下のとおりです。 ・QUICKます。Doスキャンしませライン FAST・:のみチェックはテーブルが正しく閉じられていない 。・CHANGED:最後の検査の変更後のテーブルをチェックし、適切にテーブルを閉じられていません ・MEDIUM:走査線、削除された接続が有効であることを確認するためです。 ・EXTENDED:各行のすべてのキーワードは、包括的なキーワード検索になりますため。 唯一のInnoDBテーブル型の有効なMyISAMテーブルの種類のオプションが無効。実装プロセスでCHECK TABLE文は、テーブルの読み取り専用ロックに追加されます。 ( 3 )最適化テーブル のテーブルを最適化するためにOPTIMIZE TABLEステートメントを使用してMySQLインチ InnoDBテーブルとのMyISAMテーブル型のステートメントがあります。ただし、OPTIMIZE TABLE文は、テーブルVARCHAR、フィールドのBLOBやTEXTタイプに最適化することができます。 基本的な構文のOPTIMIZE TABLE文は以下の通りである: OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG]表tb1_name [、tb1_name] .... 排除を削除し、アップデートファイルの断片化は、OPTIMIZE TABLE文によって引き起こされます。実装プロセスでOPTIMIZE TABLE文は、テーブルの読み取り専用ロックに追加されます。
04-最適化されたMySQLサーバ
#1は、最適化サーバのハードウェア サーバーのハードウェアのパフォーマンスが直接MySQLデータベースの性能を決定します。 ハードウェアのパフォーマンスのボトルネックのMySQLデータベースは直接動作速度と効率を決定します。 以下は、サーバハードウェア最適化するための方法であって、 ( 1 )大規模なメモリ構成を。 ( 2 )高速ディスク・システムは、ディスクの待機時間を短縮応答速度を増加させるように構成される。 ( 3 )合理的な配布ディスクI \ O、複数のデバイスを並行して動作する能力を改善し、リソースの競合を低減するために、ディスク上に分散。 ( 4 )マルチプロセッサ構成、MySQLデータベースはマルチスレッドであり、マルチプロセッサ同時に複数のスレッドを実行することができます。 #2は、MySQLのパラメータ最適化 MySQLサーバのパフォーマンスを改善するように、リソースの利用率を向上させることが可能なパラメータのMySQLの最適化によって、。 MySQLサーバの設定パラメータは、my.cnfのか、my.iniファイルの[mysqld]グループです。