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
これはかなりの時間節約になりそうです。アイデアありがとうございます。