У меня есть вопрос относительно (не) использования уникального индекса. Я использую Oracle 11g.Уникальный индекс (покрытие 3 столбца) не используется в соединении
Таблица A: col1, col2, col3. col1-col2-col3 триплет имеет нескольких столбцов уникальный индекс в таблице А.
Таблица B: colX. colX является первичным ключом таблицы B.
Мой запрос:
SELECT * FROM TABLE_A A
JOIN TABLE_B B ON A.col1 = B.colX
WHERE A.col2 = 10 and A.col3 = 20
Когда я смотрю на план Объяснить в Жаба, я вижу, что «Каждая строка в TABLE_A читается.» (Полный доступ).
Однако, когда я пишу запрос:
SELECT * FROM TABLE_A A
WHERE A.col1 = 10 AND A.col2 = 20 AND A.col3 = 30
он использует уникальный индекс.
Я также пытался использовать IN, но индексы также не используются в IN-запросах. Есть ли способ использовать этот уникальный индекс в этом типе запроса соединения? Если нет, можете ли вы указать мне другой способ увеличить скорость этого запроса? Благодарю.
http://en.wikipedia.org/wiki/Database_index#Column_order Читайте о 'составном индексе'. –
Уникальное определение индекса может помочь нам. Я бы предположил, что col2 объявлен до col3, поэтому запрос без col2 принудительно переходит в сканирование таблицы. Если вы будете чаще использовать запросы, такие как 1, вам следует рассмотреть возможность переупорядочения столбцов индекса. – RubberDuck
Если в первом столбце, где указан первый столбец в индексе, будет использоваться индекс (в общем случае). Создайте 'index (col2, col3)', если вам нужен индекс в вашем первом запросе. – Mihai