Как я могу оптимизировать SQL-запрос (используя индексы, но не растровые индексы)? - PullRequest
0 голосов
/ 14 мая 2018

У меня есть запрос SQL, пример:

SELECT * FROM TAB1 NATURAL JOIN TAB2 WHERE TAB1.COL1 = 'RED'

Как я могу оптимизировать этот запрос для использования индексов, но не растровых индексов в Oracle?

1 Ответ

0 голосов
/ 14 мая 2018

ПРИМЕЧАНИЕ. Отвечает на оригинальную версию вопроса.

Во-первых, не используйте NATURAL JOIN.Это мерзость, потому что она не использует должным образом объявленные отношения внешнего ключа.Он просто использует столбцы с одинаковыми именами, что может привести к ошибочным результатам.

Во-вторых, запрос синтаксически некорректен по двум причинам.Во-первых, "Red" является ссылкой на столбец , а не на строковое значение.Есть ли в таблице столбец с именем "Red".Вторая причина заключается в том, что у вас есть самостоятельное соединение, поэтому ROW1 неоднозначно.

Это поднимает большую проблему.Ваш запрос в принципе не имеет никакого смысла.Вы присоединяете таблицу к себе, возвращая дубликаты столбцов.Каковы результаты?Довольно неопределенно:

  • Если какой-либо столбец содержит значение NULL, строки не возвращаются.
  • Если все строки являются дубликатами (без значений NULL), товы получите результирующий набор с N ^ 2 строками и дублирующимися столбцами, где N - это количество строк в таблице.

Я не могу придумать какое-либо использование для запроса.Я не вижу смысла пытаться оптимизировать его.

Если у вас есть реальный запрос, который вы хотите обсудить, я бы предложил вам задать другой вопрос.

...