내 클라이언트에 매우 큰 데이터베이스가 있습니다. 환자 기록을 포함하는 두 개의 테이블이 10 million rows
이상 있습니다. 특정 환자에 대한 환자 기록을 선택하면 2 ~ 3 초 내에 기록을 얻습니다. 그러나 where
조건에 between date
절을 전달하면 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)
내가 아니라 this-
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
실제 요구 사항 2 ~ 3 초 위 쿼리의 결과를 얻을은 -
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)
아무도 왜 실행 시간이 오래 걸리고 해결책이 무엇인지 말해 줄 수 있습니까 ??
는 가장 중요한 것은, 어떤 인덱스에 있습니다 이 테이블? 그것은 사이에 사용하려고하는 datetime을 보유하고있는 열에 하나가 필요한 것처럼 들립니다. –