Ниже мой SQL-запрос, который занимает более 10 минут, и до сих пор работает ....Помощь рефакторинга в SQL запрос
select DISTINCT Auditdata.ID,ns.ProviderMaster_ID as CDRComment
from Auditdata AuditData
inner join AuditMaster am
on am.ID=AuditData.AuditMaster_ID
inner join HomeCircleMaster hcm
on hcm.Ori_CircleMaster_ID=am.CircleMaster_ID
and hcm.Ori_ServiceTypeMaster_ID=1
and hcm.Dest_ServiceTypeMaster_ID=1
inner join NoSeriesMaster ns
on (ns.CircleMaster_ID=am.CircleMaster_ID
or ns.CircleMaster_ID=hcm.Dest_CircleMaster_ID)
and ns.ProviderMaster_ID<>am.ProviderMaster_ID
and ns.ServiceTypeMaster_ID=1
INNER JOIN NoSeriesMaster_Prefix PD
ON SUBSTRING(AuditData.CallTo, 1, CONVERT(INT, PD.PrefixLen)) = PD.PrefixNo
AND LEN(AuditData.CallTo) = CONVERT(VARCHAR(10), CONVERT(INT, PD.PrefixLen) + CONVERT(INT, PD.AfterPrefixLen))
AND PD.PrefixNo + ns.NoSeries = LEFT(AuditData.CallTo, len(ns.NoSeries) + CONVERT(INT, PD.PrefixLen))
where AuditData.TATCallType is null
and AuditData.AuditMaster_ID=74
and PrefixType='CALL'
колонка Иви используется в внутреннее объединение бросили вызов индекса и столбцов, используемых в котором оговорка также определен индекс ...
есть ли способ быстро выше запроса
Пожалуйста, помогите мне ...
Thanx
Дорогие друзья им модифицирована мой SQL Query как следовать его еще занять много времени, чтобы выполнить Против 15000000
модифицированном SQL Query следующим образом:
select DISTINCT Auditdata.ID,ns.ProviderMaster_ID as CDRComment from Auditdata AuditData inner join AuditMaster am on am.ID=AuditData.AuditMaster_ID inner join HomeCircleMaster hcm on hcm.Ori_CircleMaster_ID=am.CircleMaster_ID and hcm.Ori_ServiceTypeMaster_ID=1 and hcm.Dest_ServiceTypeMaster_ID=1 inner join NoSeriesMaster ns on (ns.CircleMaster_ID=am.CircleMaster_ID or ns.CircleMaster_ID=hcm.Dest_CircleMaster_ID) and ns.ProviderMaster_ID<>am.ProviderMaster_ID and ns.ServiceTypeMaster_ID=1 INNER JOIN NoSeriesMaster_Prefix PD ON Auditdata.callto like PD.PrefixNo + '%' AND AuditData.CallTolen = PD.PrefixLen + PD.AfterPrefixLen AND PD.PrefixNo + ns.NoSeries = LEFT(AuditData.CallTo, NoSeriesLen + PD.PrefixLen)
where AuditData.TATCallType is null and AuditData.AuditMaster_ID=74 and PrefixType='CALL'
Теперь, что я могу сделать? ?
Дорогой друг
мой запрос занимает МНОГО раз, потому что ниже части кода NoSeriesMaster содержат 4000 строк и Auditdata 15000000 строк с внутренним соединением каждый callto столбцов записи в auditdata согласованной с Noseriesmaster
INNER JOIN NoSeriesMaster_Prefix PD
ON SUBSTRING (AuditData.CallTo, 1, CONVERT (INT, PD.PrefixLen)) = PD.PrefixNo
И LEN (AuditData.CallTo) = C ONVERT (VARCHAR (10), CONVERT (INT, PD.PrefixLen) + CONVERT (INT, PD.AfterPrefixLen))
И PD.PrefixNo + ns.NoSeries = LEFT (AuditData.CallTo, len (ns.NoSeries) + CONVERT (INT, PD.PrefixLen))
где AuditData.TATCallType равна нулю и AuditData.AuditMaster_ID = 74 и PrefixType = 'ВЫЗОВ'
Дорогой друг, Когда я запускаю ниже 2 запроса и время выполнения отличается ... выберите идентификатор из auditdata где подстрока (callto, 1,2) = '91' и LEN (callto) = 12 \t (Это выполнения запроса в течение 25 секунд) выберите идентификатор из auditdata, где callto как '91%»и calltolen = 12 (этот пробег запроса в 33 секунд) \t Y это различные функции в – John