Можно ли оптимизировать этот запрос?Оптимизация SQL Firebird
SELECT
s.event_id as "id",
s.event_start as "start",
p.treatment_id as "treatment_id",
s.status_id as "status_id"
FROM
SCHEDULEREVENT s
LEFT JOIN PATIENT_HAS_EVENT p ON p.event_id = s.event_id
WHERE
p.patient_id = 50
p.event_id является Первичный ключ. Есть индекс на p.patient_id
Выполнение занимает около секунды, что слишком долго для моих нужд.
EDIT: Лучшим решением было сделать этот запрос в обратном направлении с изменением LEFT JOIN
в JOIN
.
SELECT
s.event_id as "id",
s.event_start as "start",
p.treatment_id as "treatment_id",
s.status_id as "status_id"
FROM
PATIENT_HAS_EVENT p
JOIN SCHEDULEREVENT s ON s.event_id = p.event_id
WHERE
p.patient_id = 50
Среднее время выполнения был сбит с 912 мс до 10,69 мс
Поскольку это означает, что 'LEFT JOIN' в вашем коде неявно преобразуется обратно в' INNER JOIN', включив условие в внешнюю объединенную таблицу в предложение WHERE. Это то, что вы намеревались? –
@MarkBannister Я не очень хорошо разбираюсь в базах данных, и я не понимаю, что вы говорите. Вы предлагаете выбрать из таблицы, используемой в разделе 'WHERE', а затем' JOIN' другую таблицу? –
Знаете ли вы, что запрос * предполагается * делать? Вы уверены, что это то, что он * делает? –