Понимание плана выполнения запроса - PullRequest
1 голос
/ 13 марта 2009

У меня есть этот 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 не использовался (у каждой таблицы есть свои индексы)

Я бы хотел немного лучше понять это, чтобы исправить некоторые проблемы с производительностью, которые возникают у меня с этой системой.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 13 марта 2009

Что тебе кажется неправильным? Поскольку у вас нет условий (предложение WHERE), сервер будет читать одну таблицу естественным образом, то есть от самой первой строки до последней. Принимая во внимание избирательность индекса, решили, что будет лучше читать из c и объединять записи из e и r.

0 голосов
/ 13 марта 2009

Я согласен с Андреем. Если у конвенцииio.idconvenio низкая селективность, план в порядке.

...