2

選択専用のデータを保存するアーカイブ テーブルを作成しました。

毎日、レコードのバッチをアーカイブ テーブルに転送するプログラムがあります。索引付けされた列がいくつかあります。他の人はそうではありませんが。

バッチ挿入あたりの時間コストが気になります:
- 1 回目のバッチ挿入: N1
- 2 回目のバッチ挿入: N2
- 3 回目のバッチ挿入:N3

問題は、N1、N2、および N3 がほぼ同じになるか、それとも N3 > N2 > N1 になるかです。

つまり、複数のインデックスが存在する場合、時間のコストは一定か増分か?

すべてのインデックスはクラスター化されていません。

アーカイブ テーブルの構造は次のとおりです。

create table document (
   doc_id   int unsigned primary key,
   owner_id int,  -- indexed
   title    smalltext,
   country  char(2),
   year     year(4),
   time     datetime,

   key ix_owner(owner_id)
}
4

1 に答える 1

2

コストは増分、O(log(n)).

実際には、インデックス サイズが特定のしきい値に達し、インデックス ページがキャッシュに収まらなくなると、グラフにステップが表示されます。

キャッシュのサイズはkey_buffer_sizeinMyISAMinnodb_buffer_pool_sizein で定義されInnoDBます。

このしきい値より前では、コストはメモリのシーク時間に比例し、しきい値を超えると、コストはディスクのシーク時間に比例します (log(n)もちろんすべてを掛けます) 。

于 2010-03-19T14:36:38.563 に答える