非常に大量の生データが格納されるデータベースをMysqlで設計しています。データを挿入する前にインデックスを定義する必要があることを知りたいのですが、最初にデータを挿入してインデックスを作成する必要がありますか?何か違いはありますか? また、私は知っていると思う私は2列にインデックスを持っている場合は、それを個別にまたは一緒にインデックスを作成する方が良いですか? ありがとうMySqlでのインデックス作成時間
答えて
バルクロードを実行している場合、私の意見ではインデックスを前に置かないことです。インデックスページを常に書き込むように負荷を軽減します。つまり、表が移入された後、1つずつではなく、すべての索引を作成するためにSINGLE文を実行します。私はずっと前に難しい方法を学んだ。私は1400万行以上のテーブルを持ち、15以上のインデックスを構築しなければなりませんでした。各指標は最後よりもますます長くなっています。新しいインデックスが登場するたびに、以前のページを再構築する必要がありました。すぐにそれらをすべて行うことは、はるかに優れています。
複数の列インデックスについては、クエリの実行方法によって異なります。多くの照会でWHERE条件の列以上の列を使用する場合は、単一の索引で複数の列を使用します。
データを先に挿入してください。
2列、いずれかのコンボ検索や個人としてのインデックスは、(通常のCIRCの下)になります場合:
idx_a(FLDA + FLDB) idx_b(FLDB)
に関して、 //トン
通常、大量のデータを挿入するときは、後でインデックスを作成する必要があります。つまり、データが挿入されるとインデックスを維持したり再構築したりする必要がないため、挿入プロセスが高速化されます。
インデックス作成の戦略は、データベースのクエリ方法によって異なります。あなたはそれらをセットとしてクエリしていますか(つまり、where句を一緒に持つか)(つまり、where句でどちらか一方を持つ)個人であるかどうかです。
また、私は、私はしたいが、2列に インデックスを持っている場合は知りたい、それが インデックス別々にまたは一緒に良いですか?
これはクエリによって異なります。インデックス(colA、colB)がある場合、クエリのWHERE条件でcolAを使用しない場合、データベースはこのインデックスを使用できません。クエリがある場合WHERE colB = ?
この列で始まるインデックスが必要です。
index (colA, colB);
WHERE colA = ?; -- can use the index
WHERE colA = ? AND colB = ?; -- can use the index
この1つは失敗します。
WHERE colB = ?;
しかし...あなたは、インデックス内の列の順序を変更する場合:
index (colB, colA); -- different order
WHERE colb = ?; -- can use the index
WHERE colA = ? AND colB = ?; -- can use the index
そして今、この1つは使用することはできませんがインデックス:
WHERE colA = ?;
クエリを確認するには、を使用してくださいを作成し、実際に必要なインデックスのみを作成します。
WHERE colA =? AND colB =? - インデックス(colB、colA)を使用しないインデックス< - を使用できます。インデックス(colA、colB)が必要です – judda
@judda:WHERE colA =? AND colB =? WHERE colB =とまったく同じですか? AND colA =? MySQLが両方のインデックスを使用できない場合は、オプティマイザに深刻なバグがあります。 EXPLAINが伝えます。 –
私はいくつかのオプティマイザで両方の方法が異なって扱われるので両方の方法を索引付けする必要があることを知っています。 mysqlの場合、私は100%確実ではありません。オプティマイザは必要に応じてそれらをスワップしますが、そうでないかもしれません。 http://explainextended.com/2010/05/19/things-sql-needs-determining-range-cardinality/は、インデックスに関する擬似的な説明であり、それらがmysqlでどのように動作するかを示します。 – judda
- 1. MySql Workbenchでのインデックス作成
- 2. mysql - 既存のタイムスタンプからインデックスされた時間列を作成する
- 3. mysqlの部分インデックス作成、逆インデックス作成
- 4. solr 6.1.0ではインデックス時間フィールドにインデックスが作成されません。 "event_timestamp"
- 5. 複数の間隔でのインデックス作成
- 6. PostgreSQL同時インデックス作成 - 無効インデックス
- 7. mysqlでインデックスを再作成する
- 8. Xcode 4のインデックス作成に時間がかかりすぎる
- 9. インデックスの作成に長時間を要する
- 10. Xcodeのインデックス作成に時間がかかります
- 11. クエリ時間ではなく、挿入時に作成されるインデックスを作成できますか?
- 12. mysqlのインデックス作成の質問
- 13. MySQL。 "OR"クエリのインデックスを作成する
- 14. Solrインデックス時間
- 15. MySQLタイムスタンプのみ作成時
- 16. ファイルソース作成時間
- 17. HWND作成時間
- 18. インデックスの作成に時間がかかるのはなぜですか?
- 19. Mysqlのインデックス構成
- 20. MySQL - >時間と分だけのテーブルを作成する
- 21. MySQLのカラム作成時間を見つける
- 22. Twitterプロットの作成時間
- 23. 長時間実行されているクエリのMySQLインデックス作成 - キーは使用されていますか?
- 24. Solrインデックス時間ブーストVSクエリ時間ブースト?
- 25. MySQLインデックスの最終使用時間を取得しますか?
- 26. インデックス配列のインデックス作成時のNumpy配列の設定値
- 27. MySQLでインデックスを作成する際のインデックス名の意義は何ですか?
- 28. Tire - Elasticsearch - 作成時のインデックス作成をスキップする方法
- 29. 空間インデックスのサイズはMySQLで
- 30. のMySQL&PHP:データベース内に作成/更新された時間までの時間や日を追加
3つのインデックスを持つインデックスを1回、別々にインデックスを作成すると、それは悪い高オーバーヘッドですか? – Hossein
これは問題ありません。実際に個別にクエリを実行する必要がない場合は、不必要なオーバーヘッドに過ぎません。 – judda