Задача выполнения запроса - PullRequest
0 голосов
/ 13 октября 2009

Использование SQL 2005: «слишком много времени для выполнения»

Я хочу отфильтровать дату, дата не должна отображаться в праздничные дни, и я использую три таблицы с Inner Join

Когда я запускаю приведенный ниже запрос, он занимает слишком много времени для выполнения, потому что я фильтрую cardeventdate с тремя таблицами.

Запрос

SELECT 
   PERSONID, CardEventDate tmp_cardevent3 
WHERE (CardEventDate NOT IN 
           (SELECT T_CARDEVENT.CARDEVENTDATE 
            FROM T_PERSON 
            INNER JOIN T_CARDEVENT ON T_PERSON.PERSONID = T_CARDEVENT.PERSONID 
            INNER JOIN DUAL_PRO_II_TAS.dbo.T_WORKINOUTTIME ON T_CARDEVENT.CARDEVENTDAY = DUAL_PRO_II_TAS.dbo.T_WORKINOUTTIME.DAYCODE 
                   AND T_PERSON.TACODE = DUAL_PRO_II_TAS.dbo.T_WORKINOUTTIME.TACODE
            WHERE (DUAL_PRO_II_TAS.dbo.T_WORKINOUTTIME.HOLIDAY = 'true')
           )
      ) 
ORDER BY PERSONID, CardEventDate DESC

Для вышеупомянутого запроса есть любой другой способ сделать фильтр даты.

Ожидаете альтернативные запросы для моего запроса?

Ответы [ 2 ]

2 голосов
/ 13 октября 2009

Я почти уверен, что проблема не в соединенных таблицах, а в том, что их нет, что делает их медленными.

Попробуйте вместо этого использовать объединение:

select m.PERSONID, m.CardEventDate
from T_PERSON p
inner join T_CARDEVENT c on p.PERSONID = c.PERSONID
inner join DUAL_PRO_II_TAS.dbo.T_WORKINOUTTIME w
   on c.CARDEVENTDAY = w.DAYCODE 
   and p.TACODE = w.TACODE
   and w.HOLIDAY = 'true'
right join tmp_cardevent3 m on m.CardEventDate = c.CardEventDate
where c.CardEventDate is null
order by m.PERSONID, m.CardEventDate desc

(В вашем запросе отсутствует предложение from, поэтому я не знаю, из какой таблицы вы пытаетесь получить данные.)

Edit:
Поместите tmp_cardevent3 в правильное место.

0 голосов
/ 13 октября 2009

Созданы ли у вас индексы для всех столбцов, которые вы используете для объединения? В частности, я бы рассмотрел индексы PERSONID в T_CARDEVENT, TACODE в T_PERSON и T_WORKINOUTTIME и HOLIDAY в T_WORKINOUTTIME.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...