Я пытаюсь выполнить счет, отличный от SQL-сервера, двумя полями.Count, отличное от нескольких столбцов, занимает много времени
Я пробовал два разных способа. первый из них конкатенации:
select count (distinct CONCAT ([UCID],[CALLSEGMENT]))
from IVR_LINES
where UCID in (select UCID
from [EPMTest].[dbo].[IVR_LINES]
where MODULE = 'hozlap' and EVENT_NAME = 'A3' and EVENT_VALUE in ('1','2','3') and DATE> 20160911)
and EVENT_NAME = 'A6' or EVENT_NAME = 'A7'
В то время как второй является использование суб-запрос:
select COUNT(*) from(
select distinct UCID,CALLSEGMENT
from IVR_LINES
where UCID in (select UCID
from [EPMTest].[dbo].[IVR_LINES]
where MODULE = 'hozlap' and EVENT_NAME = 'A3' and EVENT_VALUE in ('1','2','3') and DATE> 20160911)
and EVENT_NAME = 'A6' or EVENT_NAME = 'A7'
)a
Они берут примерно в то время же работает (более 10 секунд, вероятно, из-за самого внутреннего запроса). Однако я хотел бы знать, какой из них эффективнее? какой метод выбрать?
Благодаря
Посмотрите на план выполнения – TheGameiswar
Я бы сказал, что первый из них более рискован, если только домены 'UCID' и' CALLSEGMENT' не гарантируют, что конкатенация не может создавать ложные дубликаты. Например. если одна строка может содержать 'a, bc' и вторую строку' ab, c', тогда конкатенация этих двух столбцов будет относиться к ним как к равным. –