質問: new DateTime(2013, 04, 20, 15, 0, 0); conn.Query(sql,new {begin_time=bt,end_time=et}).ToList() ``` クエリが遅い、時間は00:00:02.2142132です --- 例えば2 ``` string sql="select * from A where time>=to_date(:begin_time,'yyyy-mm-dd hh24:mi:ss') and time(sql,new {begin_time="2013-04-19 0:00:00",end_time="2013-04-20 15:00:00"}).ToList() ``` クエリは高速で、時刻は00:00:00.4604229です --- 以下は新しいテストケースです。すべてのテストレコード数はデータベースから39です。 group1:Oracle.ManagedDataAccessの使用 test1:00:00:01.9456767。 dapperを使用し、datetimeはdatetime型です(例:.1:begin_time) test2:00:00:00.6667549。 dapperを使用し、datetimeは文字列型です(例:to_date(:begin_time、format))。 test3:00:00:01.8552286 ado.net / OracleCommand / OracleDataAdapterを使用し、datetimeはdatetime型です(例:.1:begin_time) test4:00:00:00.0592419。 ado.net / OracleCommand / OracleDataAdapterを使用し、datetimeは文字列型です(例:2。to_date(:begin_time、format))。 --- group2:System.Data.OracleClientを使用する test5:00:00:00.0184799。 dapperを使用し、datetimeはdatetime型です(例:.1:begin_time) test6:00:00:00.1158088。 dapperを使用し、datetimeは文字列型です(例:to_date(:begin_time、format))。 test7:00:00:00.0193022。 ado.net / OracleCommand / OracleDataAdapterを使用し、datetimeはdatetime型です(例:.1:begin_time) test8:00:00:00.0185583 ado.net / OracleCommand / OracleDataAdapterを使用し、datetimeは文字列型です(例:2。to_date(:begin_time、format))。 System.Data.OracleClientを使用すると2つの方法が高速であることがわかりました。 Oracle.ManagedDataAccessのみを使用します。eg1はsill slowで、eg2は高速です。 Oracle.ManagedDataAccessの原因である可能性があります。
回答: 私はOracle.ManagedDataAccessで同様の問題を抱えていましたが、 `DateTime`パラメータがクエリ内の`Timestamp`変換されることを発見しました。お時間の列がある場合は`Date`の代わりに、 `Timestamp` 、Oracleは暗黙的に変換します`Timestamp` 、その列上の任意のインデックスを使用することはできません。 次のようにクエリを書き直してください: ``` select * from A where time>=cast(:begin_time as date) and time<=:cast(end_time as date) ``` それがパフォーマンスを向上させるかどうかを確認します。