Подтвердить что ты не робот

"is not null" vs boolean MySQL - Производительность

У меня есть столбец, который является datetime, converted_at.

Я планирую делать звонки, которые часто проверяют WHERE converted_at is not null. Таким образом, я рассматриваю наличие логического поля converted. Является ли их существенной разницей в производительности между проверкой, является ли поле not null vs, если оно false?

Спасибо.

4b9b3361

Ответ 1

Если в одном поле есть ответственность, вы предпочитаете разделять одно и то же на два поля. Это создает больше инфраструктуры, что в вашем случае можно избежать.

Что касается вопроса о вопросе, я считаю, что в большинстве реализованных баз данных MySQL включен внутренний флаг, который является логическим в любом случае для представления NULLability поля.

Вы должны полагаться, что это сделано для вас правильно.

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

Ответ 2

Использование WHERE converted_at is not null или WHERE converted = FALSE, вероятно, будет одинаковым в вопросах производительности запросов.

Но если у вас есть это дополнительное поле бит, которое используется для хранения того, является ли поле converted_at нулевым или нет, вам нужно как-то поддерживать целостность (через триггеры?) всякий раз, когда добавляется новая строка и каждый раз колонка обновляется. Итак, это де-нормализация. А также означает более сложный код. Кроме того, у вас будет хотя бы еще один индекс в таблице (это означает, что бит медленнее вставляет/обновляет/удаляет операции).

Поэтому я не думаю, что это полезно для добавления этого поля.

Если вы можете изменить рассматриваемый столбец от NULL до NOT NULL (возможно, путем нормализации таблицы), вы можете получить некоторое увеличение производительности (за счет увеличения/увеличения количества таблиц).