Страница 1 из 1

Что лучше is null или =0

Добавлено: 21 июн 2007, 13:09
UNK
На стадии разработки БД (FireBird1.5))возник вопрос. Могу сделать поле

GD_IDOWNER integer;
В дальнейшем в запросах буду часто использовать
Where GD_IDOWNER is null
Where not GD_IDOWNER is null


или

GD_IDOWNER INTEGER DEFAULT 0 NOT NULL
В дальнейшем в запросах буду часто использовать
Where GD_IDOWNER = 0
Where GD_IDOWNER <>0

Наверно в 1 случае план натурал во втором случае будет использоваться индекс по GD_IDOWNER.
Что лучше? Что будет работать быстрее? Предположительно в таблице 10000-30000 записей.


Ю.Н.

Добавлено: 21 июн 2007, 15:09
WildSery
Какой процент таких "пустых" записей относительно всей таблицы?

Добавлено: 21 июн 2007, 15:15
UNK
~30%

Добавлено: 21 июн 2007, 15:43
WildSery
У индекса будет некоторое преимущество. Конечно, только при отборе на равенство, на неравенство индекс не подхватится в любом случае.
Я поля с допустимым нуллом обычно не создаю (см. Дейта :)), потому сделал бы NOT NULL DEFAULT 0.

Добавлено: 21 июн 2007, 16:21
UNK
Спасибо.

Добавлено: 21 июн 2007, 16:34
Dimitry Sibiryakov
UNK писал(а):Спасибо.
Но с другой стороны если название поля означает то, что я думаю, то оно должно ссылаться на другую таблицу. В этом случае при использовании ноля будут определенные трудности с отображением таблицы владельцев.

Добавлено: 21 июн 2007, 17:30
Merlin

Код: Выделить всё

select first 1 code, name
from countries
order by 1
       CODE NAME                      
=========== ========================= 

          0 _Не определена            
Правда, в случае референсов не на справочники, а между объектами сложной структуры не всё так прозрачно, особенно в случае композитных ключей.