Ответ 1
Первичный ключ всегда индексируется. Это то же самое для MyISAM и InnoDB и, как правило, справедливо для всех механизмов хранения, которые поддерживают индексы.
Вам нужно явно создать индекс, или это неявно при определении первичного ключа? Является ли ответ одинаковым для MyISAM и InnoDB?
Первичный ключ всегда индексируется. Это то же самое для MyISAM и InnoDB и, как правило, справедливо для всех механизмов хранения, которые поддерживают индексы.
Согласно http://dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.html, похоже, что это будет неявным
Несмотря на то, что в 2009 году было задано задание, я бы опубликовал фактическую ссылку на документацию MySQL на первичные ключи. http://dev.mysql.com/doc/refman/5.5/en/optimizing-primary-keys.html
Первичный ключ для таблицы представляет столбец или набор столбцов, которые вы используете в своих наиболее важных запросах. Он имеет связанный индекс для быстрой производительности запросов.
Справочник по MySQL 5.0 см. По адресу: http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html.
Большинство индексов MySQL (PRIMARY KEY, UNIQUE, INDEX и FULLTEXT) хранятся в B-деревьях. Исключение состоит в том, что индексы на пространственных типах данных используют R-деревья, а таблицы MEMORY также поддерживают хэш-индексы.
Первичный ключ неявно индексируется как для MyISAM, так и для InnoDB. Вы можете проверить это, используя EXPLAIN в запросе, который использует первичный ключ.
Вам не нужно явно создавать индекс для первичного ключа... это делается по умолчанию.
Я думаю, это ответ
mysql> create table test(id int primary key, s varchar(20));
Query OK, 0 rows affected (0.06 sec)
mysql> show indexes from test \G
*************************** 1. row ***************************
Table: test
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 1
Column_name: id
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
1 row in set (0.00 sec)
Индексы лучше всего использовать для столбцов, которые часто используются в предложениях и в любой сортировке, например "order by". Возможно, вы работаете над более сложной базой данных, поэтому хорошо помнить несколько простых правил.
Индексы ускоряются там, где условия и порядок. Не забудьте подумать о том, КАК ваши данные будут использоваться при создании ваших таблиц. Есть еще несколько вещей, которые нужно запомнить. Если ваша таблица очень маленькая, т.е. Только несколько сотрудников, хуже использовать индекс, чем оставить его, и просто позволить ему выполнять сканирование таблицы.
Индексы действительно пригодны только для таблиц с большим количеством строк.
Еще одна вещь, которую нужно помнить, это конфликт в ситуации с нашей базой данных наших сотрудников, заключается в том, что если столбец является переменной длиной, индексы (как и большинство MySQL) работают гораздо менее эффективно.
Не забудьте присоединяться тоже! Индексированные поля объединений ускоряют работу.
Первичный ключ всегда автоматически индексируется и уникален. Поэтому будьте осторожны, чтобы не создавать избыточные индексы.
Например, если вы создали таблицу как таковую
CREATE TABLE mytable (foo INT NOT NULL PRIMARY KEY, bar INT NOT NULL, baz INT NOT NULL,
UNIQUE(foo), INDEX(foo)) ENGINE=InnoDB;
потому что вы хотите индексировать первичный ключ и применять ограничение уникальности на нем, вы на самом деле должны создать три индекса на foo
!