0

データベースにsqlite3を使用しています。データベースには、UTF-8 文字列である「名前」フィールドをインデックスとして使用するテーブルがあります。大文字と小文字を区別しない比較を行うために、「name_upper」という新しい列を追加しました。これは、「name」フィールドの UTF-8 大文字バージョンであり、代わりにそれをインデックスとして使用します。

「name」フィールドはテーブル内で群を抜いて最大のフィールドであることが判明したため、「name_upper」フィールドを定義することで、基本的にテーブルのサイズを 2 倍にしました。データベースのサイズは、データベース ファイルが存在するディスク サイズに比べれば小さいままですが、メモリ サイズに比べれば大きくなる可能性があります。

私の質問は、テーブルのサイズを 2 倍にするとパフォーマンスに影響しますか? テーブルをキャッシュするために、より多くのメモリを使用する必要があるのではないかと心配しています。

別の解決策は、大文字と小文字を区別しない UTF-8 比較を実行する新しい照合関数を定義することです (ICU が実装を提供していることは承知しています)。すべての比較で小文字から大文字への変換が必要になるため、その場合のパフォーマンスへの影響はわかりません。

4

1 に答える 1

0

クエリが実際にすべてのテーブルを読み取る場合、テーブルのサイズを 2 倍にするとパフォーマンスに影響します。インデックスのみをチェックすることで検索に答えることができる場合、パフォーマンスは同じままです。

通常、I/O がランタイムを支配します。また、データがキャッシュに収まる場合でも、インデックスを使用するほとんどのルックアップではバイナリ検索が使用されるため、照合関数の実行時間はほとんど気になりません。つまり、少数のレコードのみが比較されます。

于 2012-09-05T13:51:58.737 に答える