[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: NOT NULL vs NULL
lans8097
У меня с другом произашол спор что лучше.
Я щитаю что если в ячейке не нужно указывать NOT NULL то этого и не стоит делать.
Друг-же щитает что NOT NULL упрощает и ускоряет работу Mysql
Какие мысли у вас по этому поводу ?
Игорь_Vasinsky
для чего указывается not null ?
если ты узнаешь ответ на этот вопрос - то ты поймёшь кто прав.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
lans8097
Цитата (Игорь_Vasinsky @ 21.07.2013 - 14:36)
для чего указывается not null ?
если ты узнаешь ответ на этот вопрос - то ты поймёшь кто прав.

В случии если поле не может быть пустым
lans8097
Цитата (Игорь_Vasinsky @ 21.07.2013 - 14:36)
для чего указывается not null ?
если ты узнаешь ответ на этот вопрос - то ты поймёшь кто прав.

Суть вопроса в том что как мне пытаюстся обяснить

CREATE TABLE IF NOT EXISTS `test` (
`text` VARCHAR(45) NOT NUTT DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Лучше чем

CREATE TABLE IF NOT EXISTS `test` (
`text` VARCHAR(45) NUTT
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


Тобиш экономия памяти и ускорение работы самого Mysql
T1grOK
Так и есть. Поэтому и рекомендуется использовать NULL только там где без него действительно нельзя обойтись.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
S.Chushkin
Цитата (T1grOK @ 21.07.2013 - 19:16)
Так и есть. Поэтому и рекомендуется использовать NULL только там где без него действительно нельзя обойтись.

С какой стороны посмотреть.
По логике - да, NULL это неопределённое значение (не существующее) и его использовтаь надо там, где это нужно. А вот по объёму... NULL занимает 1 бит, не нуль - всегда больше. С другой стороны, нуль добавляет N байт к записи.
Тут как всегда, всё зависит от конкретного случая, структуры БД, логики. В т.ч. и на скорость работы будет влиять по разному. Так что советы для сферического коня в вакууме не сработают в реальности, скорее всего, если только случайно совпадёт.

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
S.Chushkin
Цитата (lans8097 @ 21.07.2013 - 18:52)
Суть вопроса в том что как мне пытаюстся обяснить

CREATE TABLE IF NOT EXISTS `test` (
`text` VARCHAR(45) NOT NUTT DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Лучше чем

CREATE TABLE IF NOT EXISTS `test` (
`text` VARCHAR(45) NUTT
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


Тобиш экономия памяти и ускорение работы самого Mysql

В этом конкретном случае - да, NOT NULL лучше.

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Guest
Подсистема хранения данных (любая) в mysql плохо работает с null параметрами при всём том что она резервирует для значения память в заданном типе, да же если значение null.
Null очень плох в том когда производится поиски по этому столбцу и тем более если столбец имеет индексирование, в этом случае на порядок возрастает сложность управления индексами со значениями null для столбца, соответственно подготовка выражений оптимизатором и сортировка по тому же столбцу.
johniek_comp
ну зачем загадь и спорить если есть документация, там написано же ну!

_____________
user posted image
Guest
Кстати, varchar тип всегда резервирует память под будущие значения, да же если null, а вот text расширяется динамически.
S.Chushkin
Цитата (johniek_comp @ 21.07.2013 - 23:31)
ну зачем загадь и спорить если есть документация, там написано же ну!

Дока написана мутно местами, а поиск на их сайте ещё хуже - просто так хрен найдёшь что нужно sad.gif
Так что некоторые моменты можно и пояснить. В частности...
Цитата (Guest @ 21.07.2013 - 22:44)
Подсистема хранения данных (любая) в mysql плохо работает с null параметрами при всём том что она резервирует для значения память в заданном типе, да же если значение null.

Не всё так просто.
Как сказал выше, всё зависит от конкретики. Например, метод хранение NULL (флага и колонки) в myISAM и InnoDB отличается, в InnoDB ещё отличается от формата строки, например.

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
T1grOK
Цитата (S.Chushkin @ 21.07.2013 - 20:24)
Как сказал выше, всё зависит от конкретики.

Без разницы NULL, в любой подсистеме хранения данных, независимо как он хранится, обрабатывается плохо и всегда выступает якорем, об этом во многих нормальных книгах написано(взять хотя бы MySQL оптимизация производительности).
Цитата (Guest @ 21.07.2013 - 19:58)
Кстати, varchar тип всегда резервирует память под будущие значения, да же если null, а вот text расширяется динамически.

Поиск и выборка в динамических полях всегда создает накладные расходы, из-за того, что мы не имеем идеальной сетки.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
S.Chushkin
Цитата (T1grOK @ 22.07.2013 - 08:38)
Цитата (S.Chushkin @ 21.07.2013 - 20:24)
Как сказал выше, всё зависит от конкретики.

Без разницы NULL, в любой подсистеме хранения данных, независимо как он хранится, обрабатывается плохо и всегда выступает якорем, об этом во многих нормальных книгах написано(взять хотя бы MySQL оптимизация производительности).

С тем, что NULL увеличивает время работы процессора, никто не спорит.
Но разница есть и существенная - время обработки бита и время чтения лишних пары байт с диска по сравнению с 1 битом различаются. ® "Выбор зависит от конкретики", - что важнее/выгоднее при данной структуре БД, объёма данных, движка, железа и пр. В одном случае может дать плюс в скорости, в другом ничего, в третьем минус.

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.