У меня проблема. Моя БД - Oracle 9. Вот мой SQL:
SELECT COUNT(distinct A.person_id)
INTO p_record_count
FROM A,
B,
F,
T
WHERE B.position_id = F.position_id **--Normal bussiness association**
AND T.field2 = A.org_id **--Normal bussiness association**
AND F.Organization_Id = A.org_id **--Normal bussiness association**
AND A.person_id = F.person_id **--Normal bussiness association**
AND F.primary_flag = 'Y' **--Normal bussiness association**
and sysdate between F.effective_start_date and
F.effective_end_date **--Normal bussiness association**
AND NOT EXISTS --very slow
(SELECT log.person_id
FROM cper.ehr_access_log log
WHERE log.person_id = A.person_id
AND log.access_page = 'login.do'
AND trunc(log.access_time) BETWEEN
to_date(p_startDate, 'yyyy-mm-dd') AND
to_date(p_endDate, 'yyyy-mm-dd'))
AND A.enable_flag = 'Y'; **--Normal bussiness association**
Требование: получить людей, которые не вошли в систему.
Логика: собрать всех людей, которых я могу получить, затем минус людей, которые входят в систему.
У меня есть только таблица с записями для входа.
Таблица cper.ehr_access_log содержит более 10 миллионов записей. Это таблица журнала. Этот SQL занимает около 30 секунд.
В течение 5 с возможно? Спасибо за вашу помощь.
Спасибо ~! Я постараюсь. Хороших выходных ~:)