Как получить быстрый результат при запросе очень большой таблицы базы данных? - PullRequest
1 голос
/ 07 марта 2011

У моего клиента очень большая база данных. Две таблицы, содержащие записи пациентов, имеют более 10 million rows. Когда я выбираю запись пациента для конкретного пациента, я получаю запись через 2-3 секунды. Но если я передаю условие between date в состоянии where, я не получаю записи раньше, чем через 25-30 минут. Мой запрос-

select convert(varchar(12),[DateTime],101) as [DateTime] , min(cast(Response as int)) as     [MinFallTotal], max(cast(Response as int)) as [MaxFallTotal]
from NurQueryResults
where VisitID = 'W3074332666' and QueryID = 'NURFALLZ'
Group by convert(varchar(12),[DateTime],101)

Я получаю результат верхнего запроса через 2-3 секунды, НО не для этого -

select VisitID, min(cast(Response as int)) as [MinFallTotal], max(cast(Response as int)) as [MaxFallTotal]
from NurQueryResults
where QueryID = 'NURFALLZ' and convert(varchar(12),[DateTime],101)='12/23/2010'
Group by convert(varchar(12),[DateTime],101), VisitID

Фактическое требование -

select TOP 10 AV.VisitID as [UNIT], AV.AccountNumber as [ACCOUNT], AV.Name as [PATIENT NAME], convert(varchar(11),AV.BirthDateTime,101) as [DoB]
, convert(varchar(12),NQ.[DateTime],101) as [DateTime],
(cast(min(cast(NQ.Response as int)) as varchar(5))+ ' - ' + cast(max(cast(NQ.Response     as int)) as varchar(5)) ) as [FALL]
from AdmVisits AV join NurQueryResults NQ ON
AV.VisitID = NQ.VisitID
where   NQ.QueryID = 'NURFALLZ' AND convert(varchar(12),NQ.[DateTime],101) = '12/24/2010'
Group by convert(varchar(12),NQ.[DateTime],101), AV.VisitID, AV.AccountNumber, AV.Name, convert(varchar(11),AV.BirthDateTime,101)

Может кто-нибудь сказать мне, почему это занимает так много времени, чтобы выполнить и каково решение ??

1 Ответ

2 голосов
/ 08 марта 2011

Вам действительно нужно проверить план запросов на наличие плохо работающего кода. Вставьте ваш запрос в окно и нажмите CTRL + L. Это должно в значительной степени сказать вам, что ему не нравится.

Если вы используете IDE SSMS 2008, подключенную к базам данных SQL2005, и запускаете план запросов, вам также следует дать рекомендации по поводу любых отсутствующих индексов, которые могли бы помочь вашему запросу.

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

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