Должен ли я индексировать поля, которые имеют одну из этих двух опций: unsigned, unique (mysql)? - PullRequest
0 голосов
/ 29 июня 2019

Пожалуйста, посмотрите код ниже, чтобы понять мой вопрос

CREATE TABLE seller (
            `id`  INT(11)   NOT NULL    AUTO_INCREMENT,
            `status`            INT(11)    UNSIGNED NOT NULL,
            `phone`     VARCHAR(20)     UNIQUE NOT NULL,

            PRIMARY KEY (`id`),
            KEY `phone` (`phone`),
            KEY `status` (`status`)
)

правильно ли я добавил эти КЛЮЧ phone (phone), КЛЮЧ status (status) строк до конца кода?

1 Ответ

0 голосов
/ 29 июня 2019

UNSIGNED и UNIQUE являются несвязанными атрибутами.

UNSIGNED означает, что в это поле вы будете помещать только неотрицательные числа.Это относится к большинству вещей, которые хранятся в базах данных - счетчики, длины и т. Д. INT SIGNED дает диапазон около +/- 2 миллиардов.INT UNSIGNED может содержать от 0 до около 4 млрд.

UNIQUE подразумевает две вещи: «ограничение уникальности» и «индекс».

Если вставить строку с одинаковым значениемдля этого столбца INSERT получит ошибку, потому что вы нарушили «ограничение уникальности».Вы используете такие, чтобы ловить ошибки программирования.Если у вас есть таблица с одной строкой для каждого виджета, удобно получить ошибку, если вы попытаетесь вставить вторую строку для идентичного виджета.

INDEX - это ключевой инструмент для выполнения базы данных.Быстрее.Он обеспечивает быстрый способ поиска виджета по его идентификатору.

Пока я занимаюсь этим, давайте обсудим NULL против NOT NULL.Думайте о NULL как о «дополнительном значении» для столбца.Это может означать «еще не установлено», «неизвестное значение» или любое другое, основанное на вашей бизнес-логике.С другой стороны, обычно столбец должен быть предоставлен (опять же, на основе бизнес-логики), поэтому вы обычно хотите объявить столбец как NOT NULL.

Можно (идолжен) быть ровно один PRIMARY KEY для таблицы.Он однозначно идентифицирует каждую строку.

A PRIMARY KEY - это UNIQUE ключ - это INDEX (он же KEY).Все они структурированы как BTrees (в MySQL).

Возвращаясь к вашему вопросу:

правильно, я добавил эти KEY телефон (телефон), статус KEY (статус) строки до конца кода?

Синтаксис правильный.Их полезность спорна.Если вы никогда не скажете WHERE phone = '...', тогда KEY(phone) бесполезен.Иметь это не вредит (кроме траты дискового пространства и замедления INSERTs небольшого количества).

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