Является ли первичный ключ автоматически индексированным в MySQL?

Вам нужно явно создать индекс, или это неявно при определении первичного ключа? Является ли ответ одинаковым для MyISAM и InnoDB?

Ответ 1

Первичный ключ всегда индексируется. Это то же самое для MyISAM и InnoDB и, как правило, справедливо для всех механизмов хранения, которые поддерживают индексы.

Ответ 3

Несмотря на то, что в 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 также поддерживают хэш-индексы.

Ответ 4

Первичный ключ неявно индексируется как для MyISAM, так и для InnoDB. Вы можете проверить это, используя EXPLAIN в запросе, который использует первичный ключ.

Ответ 5

Вам не нужно явно создавать индекс для первичного ключа... это делается по умолчанию.

Ответ 6

Я думаю, это ответ

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)

Ответ 7

Индексы лучше всего использовать для столбцов, которые часто используются в предложениях и в любой сортировке, например "order by". Возможно, вы работаете над более сложной базой данных, поэтому хорошо помнить несколько простых правил.

  • Индексы замедляют вставки и обновления, поэтому вы хотите тщательно их использовать в столбцах, которые ЧАСТОТНО обновлены.
  • Индексы ускоряются там, где условия и порядок. Не забудьте подумать о том, КАК ваши данные будут использоваться при создании ваших таблиц. Есть еще несколько вещей, которые нужно запомнить. Если ваша таблица очень маленькая, т.е. Только несколько сотрудников, хуже использовать индекс, чем оставить его, и просто позволить ему выполнять сканирование таблицы.

  • Индексы действительно пригодны только для таблиц с большим количеством строк.

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

  • Не забудьте присоединяться тоже! Индексированные поля объединений ускоряют работу.

Ответ 8

Первичный ключ всегда автоматически индексируется и уникален. Поэтому будьте осторожны, чтобы не создавать избыточные индексы.

Например, если вы создали таблицу как таковую

CREATE TABLE mytable (foo INT NOT NULL PRIMARY KEY, bar INT NOT NULL, baz INT NOT NULL,
  UNIQUE(foo), INDEX(foo)) ENGINE=InnoDB;

потому что вы хотите индексировать первичный ключ и применять ограничение уникальности на нем, вы на самом деле должны создать три индекса на foo!