Настроить таблицу выбора SQL со столбцом RAW в Oracle 10g - PullRequest
1 голос
/ 06 октября 2010

У меня есть таблица с несколькими столбцами и уникальный столбец RAW. Я создал уникальный индекс для столбца RAW.

Мой запрос выбирает все столбцы из таблицы (6 миллионов строк).

когда я вижу стоимость запроса слишком высока (51K). и он все еще использует INDEX FULL сканирования. В запросе нет условий фильтрации, просто выберите * from.

Подскажите, пожалуйста, как мне настроить операцию запроса.

Заранее спасибо.

Ответы [ 2 ]

10 голосов
/ 06 октября 2010

Почему вы намекаете на использование индекса, если извлекаете все столбцы из всех строк?Индекс поможет только в том случае, если вы фильтруете индексированный столбец.Если вы только извлекаете индексированный столбец, подсказка INDEX_FFS может помочь.Но если вам нужно вернуться к данным для любых неиндексированных столбцов, то использование индекса вообще становится контрпродуктивным, если не считать определенной пропорции возвращаемых данных, поскольку вам приходится неоднократно обращаться как к блокам данных индекса, так и к блокам данных таблицы.

3 голосов
/ 06 октября 2010

Итак, ваш запрос:

select /*+ index (rawdata idx_test) */
       rawdata.*
from   v_wis_cds_cp_rawdata_test rawdata

и вы хотите знать, почему Oracle выбирает сканирование INDEX FULL?

Ну, как сказала Алекс, причина кроется в подсказке "index (raw data idx_text)". Это директива, которая сообщает оптимизатору Oracle: «при доступе к rawdata используйте доступ к индексу для индекса idx_text», что означает, что Oracle будет делать это, если это вообще возможно, - , даже если это не так. лучший план .

Подсказки не делают запросы быстрее автоматически. Это способ сообщить оптимизатору, что не делать.

Я видел подобные запросы раньше - иногда добавляется такая подсказка, чтобы вернуть строки в отсортированном порядке, фактически не выполняя сортировку. Однако, если бы это было требованием, я настоятельно рекомендовал бы добавить предложение ORDER BY в любом случае, потому что, если подсказка станет недействительной по какой-либо причине (например, индекс будет удален или переименован), сортировка больше не произойдет, и ошибки не будет быть сообщенным.

Если вам не нужны строки, возвращаемые в каком-либо определенном порядке, я предлагаю вам удалить подсказку и посмотреть, улучшится ли производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...