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

Модераторы: kdv, CyberMax

Ответить
UNK
Сообщения: 22
Зарегистрирован: 08 дек 2006, 17:34

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

Сообщение UNK » 21 июн 2007, 13:09

На стадии разработки БД (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 записей.


Ю.Н.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 21 июн 2007, 15:09

Какой процент таких "пустых" записей относительно всей таблицы?

UNK
Сообщения: 22
Зарегистрирован: 08 дек 2006, 17:34

Сообщение UNK » 21 июн 2007, 15:15

~30%

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 21 июн 2007, 15:43

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

UNK
Сообщения: 22
Зарегистрирован: 08 дек 2006, 17:34

Сообщение UNK » 21 июн 2007, 16:21

Спасибо.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 21 июн 2007, 16:34

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

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 21 июн 2007, 17:30

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

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

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

Ответить