|
■No99147 (ど さん) に返信 > テーブルのデータを空っぽにしても結果は同じです。Indexも張っています。 > > C以外にも、Dドライブ直下、D:\testフォルダ、ネットワークフォルダなど全部試しましたが結果は1回目が > 遅く2回目以降は速いです。これらのファイルは絶対パスで指定います。 > > ちなみに.Net Frameworkのバージョンは4.7.2になります。 > > OleDbConnection nwindConn = new OleDbConnection(connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C\:test\mydb.accdb"); > > nwindConn.Open(); > OleDbConnection nwindTransaction = nwindConn.BeginTransaction(IsolationLevel.ReadCommitted); > > OleDbCommand selectCMD = new OleDbCommand("SELECT CustomerID, CompanyName FROM Customers", nwindConn);
上記のコードの通りだとするとwhere句がないのでインデックスはほぼ関係ないと思います。 OracleとかSQLserverでヒント句にインデックスを指定すれば強制的にインデックスを使用させるのは可能ですが、 全件取得であれば、オプティマイザが全表検索を選択することはあり得るので。 ましてやAccessなら、ヒント句は確かなかったと思うので、(主キー以外の)インデックスを張ってもほぼ無意味です。
ちなみに実運用上通常何件くらいですか? ゼロ件でも遅いとあるので件数の問題ではないかもしれませんが、 取得する項目がIDと名称だけだとすると、如何にAccessと言えども数千、数万程度で結合もしてない単純なselect文でそんなに時間が要することは考えにくいです。
|