一般的なインデックスとユニークインデックス、どのように選択します

/ * 

 各データ・ページのデフォルトのサイズは16キロバイトです。1. InnoDBは
彼が最初に来るまでの一般的な指標2.は、それは、あなたが次のレコードを見つける必要があるとき、記録の最初の日に、クエリ内の条件を満たしていることが見いださK = 5、記録の条件を満たしていない
最初のレコードが条件満たすことが見出されて一意インデックスの照会3を停止する、ユニークとして定義される
最小の一般的な指標と一意のインデックス性能差である
変化バッファ
メモリにはページは、更新時には、ディスクの内容が変更されますが、データが戻ってメモリデータの矛盾に変更されていない場合、あなたはバッファを変更する必要があり、この時間は、InnoDBはこれらの変更バッファにキャッシュが更新されますがmysqlのデータ・キャッシュ、次のあなたは、データ・ページにアクセスする必要がある場合は、データ・ページは、最終的にディスクにデータを書き込み、メモリに読み込まれ、その後、この変更バッファのデータ・ページ上の操作を実行しています。

元のデータページへのこの変更は、バッファ操作は、新しいプロセスがマージと呼ばれます

、あなたが変更バッファを使用することができますどのような状況の下でそう?
インデックスのみ、一意のインデックスのため、すべての更新操作は、複数の第(4,400)を挿入するために、例えば、動作は一意性制約に違反するかどうかを決定するK = 4このレコードがテーブルに存在するか否かを自身で判断する必要があり、必須です判決にメモリにデータページを読み取ります。あなたは既にメモリに読み込まれ、そして、直接速くなりますメモリを更新している場合は、そこに変更バッファを使用する必要がなく、
実際には、唯一の一般的な指標を使用することができるため、独自の屈折率変化のバッファを使用して更新することはできません
メモリ内のバッファプールを使用してバッファを変更し、したがって無限に大きくすることができません。変化バッファサイズを動的パラメータinnodb_change_buffer_max_sizeによって設定することができます。このパラメータは、50%のバッファプールの最大の変化バッファ占有率の大きさを示すために50に設定されている場合。

第一の場合:メモリ内の更新対象のレコード、および動作は、新しいデータ、InnoDB内で実行される方法の更新(4,500)
ユニーク:データが挿入されていない場合、競合が存在しない判定の位置3及び5を見つけます。
一般:3位と5を発見し、データの挿入
、それらの間の差が裁判官以上で、この違いは、CPUのために非常に小さいです

第二の場合:メモリ内のターゲット・データ・ページを更新するレコードはない
ユニーク:最初のターゲット・データメモリに読み込まページ、それが再びに書き込まれ、ターゲットの競合かどうかが決定される
通常:変更バッファに記録更新操作、実行が終了し
、変更バッファをディスクへのランダムアクセスが減少し、その更新パフォーマンスや大幅な


変更バッファアプリケーションシーン

上記により、我々は、更新操作のプロセスを加速するために、その変更のバッファを知っている、とではなく、一意のインデックスのために、一般的な指標に限定されています。

問題:すべてのシナリオは通常の屈折率変化に適用され、それをバッファリング?
変更バッファはメリットが大きいほど(つまり、更新の回数以上である)、マージする前に変更を加え、変更バッファ記録のでデータページに記録されたデータ・ページ上で、当社の事業を更新することです
一度以下を読んで書くように、事業は、ページがすぐに最良の利用の変化バッファ、確率は小さい。この時間を終了してアクセスされます
この一般的なビジネスが、課金、ログなど 
データをサポート可能な変更バッファがそれを永続なぜ?

事業が終了した場合は逆に、すぐに条件は、変更バッファ内の最初の更新レコード成立しても、問い合わせを作るが、すぐにアクセス可能、すぐにマージプロセスをトリガーするため、ランダムアクセスがIOの数を減らすことはありません、変化を大きくしますバッファメンテナンスコストなので、この変更バッファのビジネスユースが、逆効果になります。



一般的な指標とする方法が、最終的に一意のインデックスを選択するので、
我々は彼らの照会の観点から、主に上記の更新のパフォーマンスのために、何の違いではないことを知っています。だから、一般的なインデックスを選択しようとする

他の例では、変更バッファは大幅なパフォーマンスの向上を持つことができますが、クエリ操作はすぐにアップデートした後、変更バッファがクローズする必要がある場合、
どのように開閉変更バッファにそれを?
あなたは、パラメータinnodb_change_bufferingを経て変更バッファを有効にするかどうかを制御することができます。
--all:デフォルト。オープン挿入バッファが、削除マーキング操作を、パージします
--none:バッファが開いていない変更である
だけバッファ挿入操作を開きます。--insertsダンプ
--deletes:ちょうど削除マーキング操作を開く
--changes:オープンバッファ挿入操作と削除マーキング操作
--purges:のみの背景にある物理的な削除操作のオープンバッファ機能


変更バッファ動作は、サーバーが予期せずシャットダウンされている場合は、ログレコード内のREDOログ・ファイルもREDOログに記録される

ことをREDOログの書き込みは、主にランダムを保存するために使用されますディスクの消費にIO(シーケンシャル書き込みに変換)
そして、これは、ディスクのランダム読み取りIO消費を節約するために変更バッファです


* /

 

おすすめ

転載: www.cnblogs.com/LF-place/p/11537514.html