1

2.000.000 行の Microsoft Access ファイル (.mdb) があり、クエリを使用しています。

select count(*) from tblABC where instr(Column1 , "something") > 0

すべてのレコードに「何か」という単語が含まれていることを確認します。ただし、クエリは結果を返す前に 40 秒間フリーズし、通常はそれを行う必要があるため、私にとってはひどいものです。他の数値列のようなインデックスを付けて検索を最適化するにはどうすればよいですか?

4

1 に答える 1

1

上記のコメントで示唆されているように、LIKE "*...*"よりも大幅に高速であるようですInStr(...) > 0。100万行のテーブルでテストしたとき、コード

Sub SearchTest()
Dim t0 As Single, strWhere As String
t0 = Timer
strWhere = "InStr(TextField, ""86753"") > 0"
Debug.Print DCount("*", "MillionRows", strWhere) & " row(s) found"
Debug.Print "Search took " & Format(Timer - t0, "0.0") & " seconds"
End Sub

報告

20 row(s) found
Search took 5.4 seconds

そして、検索文字列を次のように変更したとき

strWhere = "TextField LIKE ""*86753*"""

報告した

20 row(s) found
Search took 3.4 seconds

また、[TextField] にインデックスを付けた場合と付けない場合でテストしましたが、私の場合、インデックスは結果に違いはありませんでした。ただし、[TextField] も一意 ("Item0000001"、"Item0000002"、... "Item1000000") であるため、フィールドに異なるデータが含まれていた場合、そのフィールドのインデックスによって違いが生じた可能性があります (賭けはしませんが)。その上で)。

于 2013-10-19T14:12:43.860 に答える