Вопрос

У меня есть этот 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 имеет низкую избирательность, с планом все в порядке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top