4

DataTable.Select行の取得に使用している約 50,000 行の DataTable があります。には、ワイルドカードの一致を含むSelect複数の条件が必要です。ANDいろいろ試してみたところ、同じことSelectを複数のステップで行うことで実行時間を大幅に短縮できることがわかりましたが、ANDステートメントの順序を変更しても影響はありません。

//This takes ~ 750 ms
DataRow[] results = myDataTable.Select("Field1 LIKE '*" + term1 + "*'" +
"AND Field2 = '" + term2 + "'" +
"AND Field3 = '" + term3 + "'");

//This also takes ~750 ms
DataRow[] results2 = myDataTable.Select("Field3 = '" + term3 + "'" +
"AND Field2 = '" + term2 + "'" +
"AND Field1 LIKE '*" + term1 + "*'");  

//This takes 0.415 ms
DataTable table1 = myDataTable.Select("Field3 = '" + term3+ "'").CopyToDataTable();
DataTable table2 = table1.Select("Field2 = '" + term2 + "'").CopyToDataTable();
DataRow [] results3 = table2.Select("Field1 LIKE '*" + term1 + "*'");  

私の質問は、検索されるレコードの数がステップ間で減少するように、SELECT操作で条件を常に左から右の順序で評価させる方法はありますか? ANDこれはかなりの時間節約になりそうです。アイデアありがとうございます。

4

2 に答える 2