Понимание плана выполнения запроса
-
22-07-2019 - |
Вопрос
У меня есть этот SQL:
SELECT
*
FROM
Requisicao r
join convenio c on c.idconvenio = r.idconvenio
join empresa e on e.idempresa = c.idempresa
Когда я выполняю его, я получаю такой план выполнения:
PLAN JOIN (C NATURAL,E INDEX (INTEG_160),R INDEX (INTEG_318))
Что означает, что индекс Convenio не использовался (у каждой таблицы есть свои индексы)
Я хотел бы разобраться в этом немного лучше, чтобы улучшить некоторые проблемы с производительностью, с которыми я сталкиваюсь в этой системе.
Спасибо.
Решение
Что вам кажется неправильным?Поскольку у вас нет каких-либо условий (предложение WHERE), сервер естественным образом прочитает одну таблицу, т.е.от самого первого ряда до последнего.Учитывая избирательность индекса, обслуживаемый решил, что лучше читать из c и объединять записи из e и r.
Другие советы
Согласен с Андреем.Если convenio.idconvenio имеет низкую избирательность, с планом все в порядке.
Не связан с StackOverflow