Как влияет нуль в базе данных? - PullRequest
0 голосов
/ 17 апреля 2011

База данных различается по реализации и способам обработки запросов и хранения данных.

Имеют ли атрибуты с нулевыми значениями место для хранения?

Влияет ли наличие атрибутов с нулевыми значениями на скорость запроса данных? По сути, запрос будет быстрее или медленнее, если данные присутствуют или нет. Заметка. Я не спрашиваю, как ускорить запрос данных.

Так что мой вопрос носит общий характер, но вы можете ответить на него для конкретной реализации базы данных, такой как sql server или sqlite.

Ответы [ 3 ]

2 голосов
/ 17 апреля 2011

В базах данных, о которых я знаю, значение NULL не занимает больше места, чем значение, отличное от NULL, оно все равно должно учитывать максимальный размер.Однако тот факт, что столбец имеет значение NULL, может потребовать дополнительной памяти.

Это связано с тем, что в дополнение к возможным значениям вам также необходимо сохранить тот факт, что столбец равен NULL или нет для каждой строки.Тем не менее, это довольно эффективно с точки зрения хранения.

Для столбца NULLable дополнительное время, затрачиваемое на запрос, может быть не более чем ничтожным.,Структура базы данных определяется требованиями к данным, а не скоростью их работы.Я не имею в виду, что вы должны полностью игнорировать производительность, но если ваш столбец должен хранить значения NULL, то это необходимо, независимо от снижения производительности.

2 голосов
/ 17 апреля 2011

Что касается дискового пространства, то следующее относится к SQL Server (возможно, но не уверен, что это применимо к другим механизмам).

Типы данных фиксированного размера хранят значение NULL в качестве размера типа данных по умолчанию:0 для чисел, '' для символов.Допустим, у вас есть столбец CHAR(5): значением NULL вы собираетесь заполнить 5 байтов.

Тип данных переменного размера хранит значение NULL с пустым значением.Допустим, у вас есть столбец VARCHAR(10): значением NULL вы собираетесь заполнить 0 байтов.

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

1 голос
/ 17 апреля 2011

Да, NULL действительно занимает место для хранения.Обычно поле использует один бит для хранения состояния NULL, поэтому все строки в таблице используют этот дополнительный бит независимо от того, имеют ли они значение NULL или нет.Это единственный способ провести различие между NULL и другими значениями (например, между NULL и 0).

Если это вас беспокоит, не забудьте пометить поля как NOT NULL, если вам не нужнодополнительная функциональность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...