2015-01-27 3 views
0

У меня есть широкий стол с миллионами записей. Существует столбец типа integer, который мне нужно изучить для определенных условий. Значение может быть 0..6 или NULL. только около 1% записей имеют ненулевое, ненулевое значение в этом столбце. Поиск значения «6» может занять 90 секунд (!) В столбце/поле нет индекса, поэтому мне гарантируется сканирование таблицы. Как повысить эффективность поиска? Должен ли я удостовериться в том, что я должен удалить столбец за пределами диапазона, или я должен убедиться, что столбец не равен нулю и обновлен до 0? Может ли целочисленное поле с таким низким коэффициентом полезности получить индекс?Столбец Oracle INT, стратегия быстрого поиска

+0

Посмотрите на индекс растровых изображений, он разработан специально для столбцов с низкой мощностью. – Mihai

+0

спасибо, но растровое изображение кажется портированным для часто обновляемого столбца –

ответ

2

Похоже, что эта колонка является идеальным кандидатом на индекс. Даже если имеется только несколько различных значений, поскольку индексы Oracle хранят только значения, которые не являются нулевыми (или, в случае индексов в нескольких столбцах, где все значения столбца не являются нулевыми), вы будете автоматически уменьшите поиск до 1% от вашей таблицы.

+0

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

+0

выселение в отдельную таблицу, то есть :) –

+0

Просто для других: «.. с ** Oracle ** индексы хранят только значения, которые не являются нулями ..» –

0

Если вы хотите запросить на нулевые значения, попробуйте использовать функцию на основе индекса:

CREATE INDEX ON quirky_column_idx wide_table (случай quirky_column когда нуль, то -1 еще quirky_column конец);

Если вы хотите использовать индекс, вы должны переписать свой запрос точно так же, как функция в индексе, например: select count (*) from wide_table где -1 = case quirky_column, когда null, а затем -1 else quirky_column конец ;

Теперь вы можете даже запрашивать нулевые значения с использованием индекса. Зная, что данные сильно искажены, вероятно, это не будет иметь большого значения, если вы не включите другие столбцы в предложение where.

Смежные вопросы