SQL Server 2012 のデータベースとクエリに奇妙な問題があります。
レコードには、(datetime2 ではなく) datetime 型の 1 つの列があり、値を形式で格納します'YYYY-MM-dd HH:mm:ss.ttt'
が、問題があります... このクエリを作成すると:
SELECT *
FROM table1 cg
INNER JOIN table2 mv ON cg.mv_id = mv.mv_id
FULL JOIN table3 fu ON cg.fu_id = fu.fu_id
FULL JOIN table4 cl ON cg.cl_id = cl.cl_id
INNER JOIN table5 so ON mv.so_id = so.so_id
WHERE mv.su_id = 1 AND (mv.mv_fecha >= '2013-09-02 17:46:03.571' AND mv.mv_fecha <= '2013-09-04 23:59:59.999')
その後、10秒ほどかかりますが、に変更するmv.mv_fecha >= '2013-09-02 17:46:03.571'
と'2013-09-02 17:46:03.572'
(ミリ秒571を572に変更することに注意してください)、クエリは4分ほどかかります!そして、私はこのレコードだけで..そして、そのミリ秒を渡すクエリを作成すると、クエリには非常に時間がかかります。table2にmv_fechaのようなレコードがあることをさりげなく指定する必要がありますが、その日時のレコードがあったとしても、それはsu_id = 2'2013-09-02 17:46:03.573'
のレコードであるため、クエリはそれを取得しません(クエリでは、フィルタリングされたsu_idは 1 )。
どうしたの???
更新: 私はtable1についていくつかの理論を持っています..そして、table1には何千ものレコードがあり、それはインデックスを含まないテーブルですか?...それが問題でしょうか?
更新 2: これは、クエリの実行計画です。