4

我对 sql server 2012 中的数据库和查询有一个奇怪的问题。

在记录中,有一列是datetime类型(不是 datetime2),并以格式存储值,'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 之'2013-09-02 17:46:03.573'的记录,但即使有一条带有该日期时间的记录,查询也不会检索它,因为它是一条su_id = 2的记录(并且在查询中过滤的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 回答