У меня есть странный вопрос с базой данных и запрос в SQL Server 2012.запросов в SQL Server 2012 с DateTime между занимает слишком много времени с разницей миллисекунды
в записях, являются один столбец, который имеет тип 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 минуты! и только с этой записью .. и если я сделаю любой запрос, проходящий через миллисекунду, запрос займет это время loooong. я должен указать, что случайно есть запись в table2 с mv_fecha как '2013-09-02 17:46:03.573'
но даже если есть запись с этой датой-временем, запрос обыкновения получить его, потому что это запись с su_id = 2 (и в запросе su_id фильтруется 1).
Что происходит ???
UPDATE: У меня есть теория с table1 .. и это что table1 тысячи записей, и это таблица, которая не содержит какой-либо индекс в нем ... может быть, что проблема?
UPDATE 2: Это план выполнения запроса:
Возможно статистики нуждаются в обновлении. Каково приблизительное количество строк, соответствующих 'mv_fecha> = '2013-09-02 17: 46: 03.570'' и каково предполагаемое соответствие' mv_fecha> =' 2013-09-02 17: 46: 03.573''? –
Также использование 'FULL JOIN' бессмысленно. Предложение 'WHERE' преобразует его обратно во внутренние соединения. –
Можете ли вы рассказать мне, где я могу найти эти цифры? –