最適化のページのアクセス速度(2) - データベースの最適化

ページのアクセス速度の最適化(B)

- データベースの最適化

I.概要

データテーブル、インデックス、SQL文のデザインの方向性の最適化を含むデータベースの最適化は、テーブルには、データベース・サーバ・アーキテクチャを分割します。

第二に、データベース設計

あなたが設計テーブルの初期段階で可能な限り、アカウントに将来の利用シナリオを取る必要があるテーブルの構成で良いです。

図1に示すように、ストレージエンジン

MySQLのしばしば言及はInnoDBストレージエンジンであるとMySIAMは、実際には、今、主のInnoDBを使用しています。両者の差:

InnoDBは速くクエリ速度主キー(主キーのインデックスはB +ツリーのリーフノードであり、データは、リーフノードに結合される)、行レベルのロック、外部キーのサポートは、より速い回復、ファイル及び索引データが存在し、トランザクションをサポートします。

MySIAMは、個別に保存されたフルテキストインデックス、テーブルレベルのロック、インデックスとデータファイルをサポートしてトランザクションをサポートしていません。

InnoDBは多くのMySIAMに優れた方法であり、実際のフルテキストインデックスのMySIAMで、あなたが達成するために他のツールを使用することができ、それは一般的にInnoDBエンジンを使用しています。

また、エンジンが同じ2つのテーブルではない場合、一つはMySIAM別でInnoDBが、その後回復が唯一のInnoDBトランザクションテーブルを回復する、そのようなトランザクションは、それはすべてのテーブルがInnoDBのあることを必要とし、完了していないです。

2、フィールド

1)文字列

優れた固定長文字列の文字なので、時間の断片化、および高い利用率を変更しないでください。比較的、長さフィールドのvarchar型の矛盾を話します。

2)列挙

フィールドのほんの数値、列挙より良いです。それはそう頻繁に設計することができ、フィールドの状態を示します。列挙MySQLの下部には、int型の店舗は、高効率に変わります。また、時間を節約するために、1,2これを使用することは推奨されていない、あなたは異なる状態を示すために英語を使用することができ、より良い識別されます。

3)デジタル

あなたは、彼らが署名を追加することができ、負の必要はありません。小数点以下を検討する前に、正確な小数が必要です。

第三に、インデックス

インデックスは、検索速度をスピードアップするが、追加および削除のために、また、そのため無差別に追加されていない、提供に必要とされる対応するB +ツリーインデックスを維持する必要がありますすることができます。

InnoDBののインデックス、主キーのサブインデックスとセカンダリインデックス。

1、主キー索引

InnoDBの主キーのインデックス、そして一緒にデータバインディング、そう見つけるために主キーに合わせて、時間の値を見つけたときに、そのので、InnoDBの主キー索引の検索は非常に高速で、対応するデータを検索します。

下図のように:

あなたが見ることができる。また、InnoDBエンジンは、主キーのデータにバインドされているので、エンジンのInnoDBテーブルには主キーを設定する必要があります。

さらに、徐々に主キーとして数字を増やすことが推奨されて設けられるので、あまりにも主キーのB +木の回転を避け、主キーを変更しないでください。

図2に示すように、補助インデックス

主キーに加えて、他の指標をまとめてセカンダリインデックスと呼びます。格納するための他のB +ツリーと他のインデックスは、子ノードがこの行に対応する主キー情報が格納されます。

したがって、対応するプライマリキー、B +木を見つけるために行く必要の主キーを見つけるためにセカンダリインデックスを、見つけるために、我々は、対応するデータを見つけることができます。

図3に示すように、ジョイントインデックス

複数のフィールドが一緒にインデックスを構成するとき、関節指数となります。共同指数は、最も左のプレフィックスの原則に従っている必要があります。このような共同インデックスa_b_cの確立など。

次の文は、インデックスで使用することができます。

= 'xx' にXXXとBから選択* = 'XX' とC = 'XX';

= 'XX' とB = 'xx' にXXXから*選択します。

=「xx」にXXXから*選択します。

= 'xx' にXXXとBから選択* = 'XX' とC> 'XX';

= 'XX' とB> 'xx' にXXXから*選択します。

>「xx」にXXXから*選択します。

次の文は、インデックスよりも少ないです。

xxxはSELECT * FROMここで、b = 'XX' とC = 'XX';

> 'XX' とB xxxのSELECT * FROM = 'XX' とC = 'XX';

なお、フィールドの前で使用されるよりも大きい、バックは、インデックスフィールドを使用することはできません。接続ジョイントインデックスストアB +ツリーの複数ので、ルートノードのリーフノードは、フィールドのフィールドを取りました。それが表示さより大きい場合、後方視野範囲、すなわち、インデックスに使用されていない、決定することができません。

4、一意のインデックス

唯一のインデックスは、インデックス機能に加えて、セカンダリインデックスですが、またフィールドが同時実行のための新しい役割を複製防止のデータベースに一意であることを確実にするために。

5、インデックス付きノート

1)ここで、順によってグループによって、インデックスを構築することが考えられます。

2)大きなフィールド上のインデックス差別、セックスのこの種のフィールドには、インデックスは意味がありません。

3)文字列の種類については、プリフィックス索引、説明フィールドの最初の7つの文字のために、例えばインデックス、文を作成することを検討:キーを追加xxtableテーブルを変更(説明(7));

四、SQL文の最適化

1、インデックスを使用してみてください

1)放棄インデックス、全表スキャンにつながることができます非検索演算式や機能の操作などの文字で始まるwhere句,! =、または<>、ではなくて、中にNULL値のフィールドを避けるために。

2)または、双方は、列インデックスを照会しなければならない限り、列の片側が索引付けされた列ではないように、インデックスの使用を放棄するつながります。少なくとも一部が、インデックスデータを使用することができ、の代わりに、労働組合と考えたりすることができます。

番号が存在する場合3)文字列型の場合は、クエリ時間は、インデックスを使用するように、文字列に引用符、必須紹介を覚えておく必要があります。

2.その他のクエリの最適化

1)データの総量を制限考慮する必要がない場合。

2)サブクエリ、サブクエリのmysqlのを避け、この計画の内部実装が実行される:最初のチェックをし、その後データは偉大に見えるときに最初、テーブルをチェックするのではなく、テーブルの外観と一致し、クエリの速度が非常に遅くなります。

3)でグループのために、MySQLのCOL1、COL2 ...ソートフィールドすべてのGROUP BYのために。クエリがGROUP BYを含めて消費した場合は、結果の並べ替えを避けたい、あなたはNULL禁止順BY ORDERを指定することができます。

V、テーブルの分割

データの量が多すぎるテーブルであり、テーブルがスキャンされたデータの量を減らすために、解決と考えることができます。

図1に示すように、横方向には、テーブルを分割しました

ときにあまりにも多くのデータ、およびデータは、横方向に、部品表を一定の規則性を持っています。トランザクションリストたとえば、ユーザはハッシュするためのサブテーブルID、ユーザIDであってもよいし、異なるハッシュ結果は、別のテーブルに対応し、その後書き込みアルゴリズム、対応するテーブルID CRUD缶に記載の方法。

図2に示すように、長手方向のテーブルを分割しました

そこに大規模なフィールドがあり、これらのフィールドは、多くの場合、照会する必要がされていない、あなたがテーブルを分離することができた場合、表には、記事のタイトルのような物品、要約、日付、キーワードなどを保存することができますが、記事の具体的な内容のために、あなたが分離することができますテーブルは、その記事の一覧ページ速度を向上させることができます。

3、パーティション

MySQLのパーティションは、データファイルに対応するデータを見つけるために自動的にMySQLが内部規則に従って、データテーブル内の異なるファイルに格納されている機能を、運んでいます。

第六に、データベース・サーバ・アーキテクチャ

1、読み取りと書き込みの分離

商用アプリケーション、データベースは通常、ライブラリから読み込んメインライブラリで書かれた、読み取りおよび書き込みが多いに分離されています。プライマリ・データベースの一貫性は、ログを中継することによって達成されます。

たびデータの変更、masterデータベースのSQL文は、リレーログの書き込み、その後、対応するデータベース・ログから移動し、その後、ライブラリから一つずつ実行するSQLをログに記録します。

2、ロード・バランシング

ロード・バランシングがmycatと他のプラグインすることによって達成することができ、それがファイルに格納され、基礎となるデータベースの抽象化として理解、及びMycat、データベースの抽象化であることができます。

公共のマイクロチャネル番号へのオリジナルリリースは - コーダーを考えるのが大好き(phpthinker)

おすすめ

転載: www.cnblogs.com/zmdComeOn/p/11704921.html