4

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分ほどかかります!そして、私はこのレコードだけで..そして、そのミリ秒を渡すクエリを作成すると、クエリには非常に時間がかかります。table2mv_fechaのようなレコードがあることをさりげなく指定する必要がありますが、その日時のレコードがあったとしても、それはsu_id = 2'2013-09-02 17:46:03.573'のレコードであるため、クエリはそれを取得しません(クエリでは、フィルタリングされたsu_idは 1 )。

どうしたの???

更新: 私はtable1についていくつかの理論を持っています..そして、table1には何千ものレコードがあり、それはインデックスを含まないテーブルですか?...それが問題でしょうか?

更新 2: これは、クエリの実行計画です。

実行計画

4

1 に答える 1

0

このクエリを試してください -

SELECT *
FROM Table1 cg
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
JOIN table5 so ON mv.so_id = so.so_id
WHERE mv.su_id = 1
    AND CAST(mv.mv_fecha AS DATETIME2) BETWEEN '20130902 17:46:03.572' AND '20130904 23:59:59.999')
于 2013-09-06T08:44:50.300 に答える