Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 null не индексируется при построении индекса  [new]
looklike
Guest
Во всех СУБД значение null не индексируется при построении индекса по этому полю и почему вообще так происходит?
31 май 12, 19:55    [12646653]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
miksoft
Member

Откуда:
Сообщений: 38920
Нет, не во всех. И даже в одной СУБД NULL может индексироваться или нет, в зависимости от каких-то причин.
31 май 12, 20:06    [12646691]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
arni
Member

Откуда: Иваново
Сообщений: 3544
Реализация может быть такова, что null и не хранится в таблице вовсе, просто поднят флаг (1 бит) в служебном поле. Т.о. индексировать просто нечего - нет значения (и в смысле, что сам по себе null - отсутствие значния, и в том смысле, что значения для null натурально нет в БД).
31 май 12, 20:07    [12646697]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
miksoft
Member

Откуда:
Сообщений: 38920
arni
Реализация может быть такова, что null и не хранится в таблице вовсе, просто поднят флаг (1 бит) в служебном поле. Т.о. индексировать просто нечего - нет значения (и в смысле, что сам по себе null - отсутствие значния, и в том смысле, что значения для null натурально нет в БД).
Это не препятствие для индексации NULL-ов.
31 май 12, 20:10    [12646705]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
looklike
Guest
А когда null не индексируется это всегда приводит к table full scan для запросов с предикатом вида WHERE field is null ?
31 май 12, 20:20    [12646739]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54803

looklike
А когда null не индексируется это всегда приводит к table full scan для запросов с
предикатом вида WHERE field is null ?

А ты знаешь какой-то другой способ достать нужные записи из таблицы при отсутствии индекса?

Posted via ActualForum NNTP Server 1.5

31 май 12, 20:26    [12646765]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
looklike
Guest
Dimitry Sibiryakov
looklike
А когда null не индексируется это всегда приводит к table full scan для запросов с
предикатом вида WHERE field is null ?

А ты знаешь какой-то другой способ достать нужные записи из таблицы при отсутствии индекса?

А в чем смысл тогда не индексировать null?
31 май 12, 20:29    [12646772]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54803

looklike
А в чем смысл тогда не индексировать null?

Спроси в разделе той СУБД, которая его не индексирует. Если найдёшь такую.

Posted via ActualForum NNTP Server 1.5

31 май 12, 20:31    [12646776]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
looklike
Guest
miksoft
Нет, не во всех. И даже в одной СУБД NULL может индексироваться или нет, в зависимости от каких-то причин.

А вы про какую именно СУБД и по какой причине имеет смысл там не индексировать null?
31 май 12, 20:38    [12646790]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
miksoft
Member

Откуда:
Сообщений: 38920
looklike
miksoft
Нет, не во всех. И даже в одной СУБД NULL может индексироваться или нет, в зависимости от каких-то причин.

А вы про какую именно СУБД и по какой причине имеет смысл там не индексировать null?
Например, Оракл не индексирует NULL если индекс состоит из одной колонки.
А в многоколоночных индексах не индексирует только те записи, где все поля индекса IS NULL.
Т.е. если одно из полей многоколоночного индекса NOT NULL, то все NULL-ы в остальных полях этого индекса будут проиндексированы.
31 май 12, 20:49    [12646820]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
looklike
Guest
miksoft
looklike
пропущено...

А вы про какую именно СУБД и по какой причине имеет смысл там не индексировать null?
Например, Оракл не индексирует NULL если индекс состоит из одной колонки.
А в многоколоночных индексах не индексирует только те записи, где все поля индекса IS NULL.
Т.е. если одно из полей многоколоночного индекса NOT NULL, то все NULL-ы в остальных полях этого индекса будут проиндексированы.

А какой смысл не индексировать именно null?
31 май 12, 21:23    [12646944]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54803

looklike
А какой смысл не индексировать именно null?

А как должно выглядеть значение индексного ключа для NULL?

Posted via ActualForum NNTP Server 1.5

31 май 12, 21:34    [12646999]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
looklike
Guest
Dimitry Sibiryakov
looklike
А какой смысл не индексировать именно null?

А как должно выглядеть значение индексного ключа для NULL?

Я уверен что ни я ни вы не знаете как выглядят 99% вещей внутри Oracle, так же уверен что они могли решить и эту задачу, а в-третьих
miksoft
... СУБД NULL может индексироваться или нет, в зависимости от каких-то причин.
31 май 12, 21:38    [12647017]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54803

looklike
Я уверен что ни я ни вы не знаете как выглядят 99% вещей внутри Oracle

И чо? От этого индексные ключи перестают быть индексными ключами?

Posted via ActualForum NNTP Server 1.5

31 май 12, 21:40    [12647027]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34709

> Во всех СУБД значение *null *не индексируется при построении индекса по этому
> полю и почему вообще так происходит?

Если не ошибаюсь, так поступает Оракл. Но -- только он один кажется.
Т.е. это скорее исключение из правила, чем правило.

Posted via ActualForum NNTP Server 1.5

31 май 12, 23:20    [12647444]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34709

> А когда null не индексируется это всегда приводит к table full scan для запросов
> с предикатом вида *WHERE field is null* ?

Ну, могут быть какие-то другие условия в запросе ещё, тогда они могут
дать не table scan.

Posted via ActualForum NNTP Server 1.5

31 май 12, 23:22    [12647459]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34709

On 05/31/2012 10:23 PM, looklike wrote:

> А какой смысл не индексировать именно null?

a == NULL ==> unknown => false.
a != NULL ==> unknown => false
NULL == NULL ==> unknown => false

Вот эта логика у них работает уже на уровне структуры индекса, и всё.

Posted via ActualForum NNTP Server 1.5

31 май 12, 23:24    [12647469]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
looklike
Guest
MasterZiv
On 05/31/2012 10:23 PM, looklike wrote:

> А какой смысл не индексировать именно null?

a == NULL ==> unknown => false.
a != NULL ==> unknown => false
NULL == NULL ==> unknown => false

Вот эта логика у них работает уже на уровне структуры индекса, и всё.

Эм, но ведь
a IS NULL ==> known

или специально для этого и создана отдельный предикат IS NULL, который не использует индексы?
31 май 12, 23:39    [12647514]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34709


> или специально для этого и создана отдельный предикат IS NULL, который не
> использует индексы?

Ну он не везде неиспользует индексы.
Ну не знаю я, что еэто ораклам вперлось так не добавлять NULL в индексы
Ну, может думали статистику индекса не портить. Может ещё какие-то
особенности реализации.

Posted via ActualForum NNTP Server 1.5

31 май 12, 23:53    [12647564]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
looklike
Guest
Кстати, а кто знает в MS SQL, Firebird, PostgreSQL и MySQL индексируется null?
1 июн 12, 00:05    [12647579]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34709

On 06/01/2012 01:05 AM, looklike wrote:
> Кстати, а кто знает в

MS SQL -- да.
MySQL -- да (на самом деле зависит от движка БД, но во всех индексируется).

Firebird, PostgreSQL -- не знаю, но подозреваю, что да.

Posted via ActualForum NNTP Server 1.5

1 июн 12, 00:58    [12647663]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54803

Firebird зависит от версии. В более-менее свежих - да.

Posted via ActualForum NNTP Server 1.5

1 июн 12, 01:39    [12647798]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
MasterZiv
On 06/01/2012 01:05 AM, looklike wrote:
> Кстати, а кто знает в

MS SQL -- да.

Для фильтрованных индексов - можно исключить
1 июн 12, 02:42    [12647941]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
hvlad
Member

Откуда:
Сообщений: 11555
Dimitry Sibiryakov
Firebird зависит от версии
Он всегда индексировался.
Возможно не всегда IS NULL хватал индекс, не помню.
1 июн 12, 11:03    [12649208]     Ответить | Цитировать Сообщить модератору
 Re: null не индексируется при построении индекса  [new]
looklike
Guest
Dimitry Sibiryakov
Firebird зависит от версии. В более-менее свежих - да.

А как выглядит значение индексного ключа для NULL?
1 июн 12, 11:08    [12649261]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить