Index values - null/not null

Be or not to be
Дата: 20.12.2012 14:28:47
Доброго дня!

Имеется табличка с полем varchar2(4000) "поле1". Предполагается, что ее объем в среднем будет составлять порядка 200 млн. строк.
Выборка из данной таблицы будет осуществляться с фильтром на "поле1", которое может быть либо заполнено, либо нет. Какой индекс лучше создать на это поле, если фильтрация будет выглядеть, как..

and поле1 is null(is not null)


Спасибо!
мимо проходил .......
Дата: 20.12.2012 14:35:01
Be or not to be,

может тупо но....

если запросы будут типа

....
where
....
and "поле1" is null (is not null)
....


можно попробовать сделать индекс на length("поле1")
и пользоватье его

....
where
....
and length("поле1") = 0 (<> 0)
....


ps: что-то SRC не работает
борщ бруевич
Дата: 20.12.2012 14:45:00
Be or not to be
Доброго дня!

Имеется табличка с полем varchar2(4000) "поле1". Предполагается, что ее объем в среднем будет составлять порядка 200 млн. строк.
Выборка из данной таблицы будет осуществляться с фильтром на "поле1", которое может быть либо заполнено, либо нет. Какой индекс лучше создать на это поле, если фильтрация будет выглядеть, как..

and поле1 is null(is not null)


Спасибо!
И сколько записей из 200 млн ты планируешь выбирать по каждому из этих условий?
Be or not to be
Дата: 20.12.2012 14:46:19
Подавляющее большинство будет null, однако, возможно, что в эту таблицу придут данные 50/50
Ramin Hashimzade
Дата: 20.12.2012 14:47:20
борщ бруевич
Be or not to be
Доброго дня!

Имеется табличка с полем varchar2(4000) "поле1". Предполагается, что ее объем в среднем будет составлять порядка 200 млн. строк.
Выборка из данной таблицы будет осуществляться с фильтром на "поле1", которое может быть либо заполнено, либо нет. Какой индекс лучше создать на это поле, если фильтрация будет выглядеть, как..

and поле1 is null(is not null)


Спасибо!
И сколько записей из 200 млн ты планируешь выбирать по каждому из этих условий?

+1 если выборка записей с нулл например будет 80% (например) то ваш индекс нафиг не нужно будет ораклу.
борщ бруевич
Дата: 20.12.2012 14:47:48
Надо будет выбирать по 100 млн записей за раз? Случайно не для выгрузки в эксель?
Ramin Hashimzade
Дата: 20.12.2012 14:49:29
Да ну
Дата: 20.12.2012 14:53:45
мимо проходил .......
    and length("поле1") = 0  (<> 0)
  ....


Серьезно?
Да ну
Дата: 20.12.2012 15:07:38
Be or not to be,

Если распределение данных в таблице близко к 50/50 (null/not null) или даже 80/20, и вам понадобится все записи по этому условию, то CBO предпочтет FULL TABLE SCAN вместо индексного доступа, и будет прав.

Если же выборка будет производиться по более селективному условию, то его колонки и надо индексировать. А null/not null - опционально к хвосту этого индекса/индексов, если уж очень хочется.
AlexFF__|
Дата: 20.12.2012 15:37:50
Be or not to be
Подавляющее большинство будет null, однако, возможно, что в эту таблицу придут данные 50/50

Для 1 случая вполне подойдет что-тог вроде
decode(field,null,null,1)