Ниже приведен текст из документации MySQL:
Первичный ключ для таблицы представляет столбец или набор столбцов, которые вы используете в своих наиболее важных запросах. Он имеет связанный индекс для быстрой производительности запросов. Производительность запроса зависит от оптимизации NOT NULL, потому что она не может включать значения NULL.
Я не понимаю точный смысл предложения жирным шрифтом из приведенного выше текста. Кто-то, пожалуйста, объясните мне.
Кроме того, дайте мне знать, можем ли мы создать индекс в столбце, содержащем значения NULL в MySQL 5.7? Если нет, то почему?
Благодарю вас.
Ключ PRIMARY используется для организации данных на диске, и поскольку существует связь с физическим расположением данных, вы не можете иметь какую-либо часть первичного ключа, равную NULL.
Необязательный индекс CAN может иметь один или несколько столбцов, которые допускают NULL. демонстрация
CREATE TABLE 'my_docs' (
'id' int(6) unsigned NOT NULL AUTO_INCREMENT,
'rev' int(3) ,
'content' varchar(200) NOT NULL,
PRIMARY KEY ('id')
) DEFAULT CHARSET=utf8;
INSERT INTO 'my_docs' ('rev', 'content') VALUES
(1, 'The earth is flat'),
(1, 'One hundred angels can dance on the head of a pin'),
(NULL, 'The earth is flat and rests on a bull\ horn'),
(3, 'The earth is like a ball.');
alter table 'my_docs' add key my_added_index ('rev');
SELECT id, rev, content
FROM 'my_docs'
where rev = 3
| id | rev | content |
|----|-----|---------------------------|
| 4 | 3 | The earth is like a ball. |
+---+-------------+-----------+------+----------------+----------------+---------+-------+------+----------+-------+
| d | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+---+-------------+-----------+------+----------------+----------------+---------+-------+------+----------+-------+
| 1 | SIMPLE | my_docs | ref | my_added_index | my_added_index | 5 | const | 1 | 100.00 | |
+---+-------------+-----------+------+----------------+----------------+---------+-------+------+----------+-------+