上記のコメントで示唆されているように、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") であるため、フィールドに異なるデータが含まれていた場合、そのフィールドのインデックスによって違いが生じた可能性があります (賭けはしませんが)。その上で)。