インデックス付きフィールドに対する 1 つの列の SELECT では、データ ファイルのレコードを読み取る必要さえありません。内部を調べると、インデックス ファイルが通常のハッシュ ファイルであることがわかります。単一列の SELECT は、キー "str" を持つインデックス ファイル レコードが読み取られることを意味します。これにより、1 秒以内に何千ものキーが返される可能性があります。
2 番目の列を追加すると、2 番目の列がインデックス化されている場合でも、おそらくシステムは何千ものレコードをすべて読み取る必要があります。これには、かなりの時間がかかります。
一般に、一意の値の数が少ないフィールドのインデックスは、あまり役に立ちません。2 番目の列に多数の可能な値を持つデータが含まれているため、特定のインデックス値ごとのレコード数が少なくなる場合は、使用されるインデックスが 2 番目の列になるように SELECT を配置するのが最善です。確かではありませんが、これを行うには、SELECT ステートメントの列の順序を単純に逆にすることができるかもしれません。そうしないと、2 つの SELECT ステートメントを続けて実行する必要がある場合があります。
例として、ファイルに Column1 = "str" の 600,000 レコードと、Column2 = "int" の 2,000 レコードがあるとします。
>SELECT somewhere WITH Column2 = "int"
>>SELECT somewhere with Column1 = "str"
2,000 レコードを読み取り、ほぼ瞬時に返されます。
Column1 と Column2 の組み合わせが頻繁に SELECT されるものである場合は、2 つを組み合わせた新しい辞書項目を作成し、その上にインデックスを作成することをお勧めします。
そうは言っても、U2 システムが 100 万レコードのファイルを処理するのに 5 分もかからないはずです。ファイルがひどくオーバーフローしている可能性が非常に高く、パフォーマンスを向上させるためにモジュロを大きくしてサイズを変更する必要があります。