Ответ
worlack 08.07.2009 01:44
[PRIMARY KEY] - Задает первичный ключ таблицы.
В таблице может быть задан только одни первичный ключ. Все значения столбца, помеченного как перичный ключ, не должны содержать значения NULL. Если при создании таблицы первичный ключ явно указан не был, а приложение его запрашивает, то БД MySQL автоматически устанавливает первый столбец с параметром UNIQUE, если во всех значениях этого столбца нигде не встречается значение NULL.
В качестве первичного ключа можно задать как один, так и несколько столбцов: PRIMARY KEY(col_1, col_2, ...)
Только в этом случае ни один другой столбец не может быть первичным, т.е. не может быть описан: PRIMARY KEY(col_1), PRIMARY KEY(col_1, col_2)
Поля PRIMARY KEY являются проиндексированными полями
---------------------------------------------------
KEY - Является синонимом к INDEX
---------------------------------------------------
INDEX- Задает поля, которые будут проиндексированы.
Индексация полей полезна для ускорения работы команды SELECT (причем ускорение порой бывает очень даже хорошее).
В качестве наглядного примера пользы от использования индексов можно взять книгу. В ней индексами будет являться оглавление. Если нам в книге надо найти определенный раздел и нет оглавления, то придется всю книгу перелистывать страница за страницей, пока нужный раздел не будет найден. А с оглавлением мы быстро можем найти любое место в книге за считанные секунды. Тоже самое и с таблицей. Если у таблицы нет индексов, то при поиске определенного значения MySQL "проходится" по всем записям таблицы и пытается найти необходимое значение. Если задать поля, которые должны быть проиндексированы, то MySQL создает специальное хранилище, в котором содержатся все значения проиндесированных полей таблицы и точное местоуказание, где это значение находится. Т.е. поиск значения происходит практически мгновенно, что несомненно сказывается на скорости выполнения скрипта.
Но за удобство и скорость работы приходится платить. В случае с индексами оплатой является увеличение базы данных примерно в два раза.
В MySQL проиндексированы могут быть поля любого типа. Для ускорения работы в полях типа CHAR и VARCHAR можно индексировать только несколько первых символов.
При задании индексов необходимо учитывать, что только у таблиц типа MyISAM, InnoDB и BDB индексируемое поле может иметь значения NULL. Чтобы небыло ошибок советуют полям, которые будут проиндексированы, всегда назначать NOT NULL.
---------------------------------------------------
UNIQUE- Этот ключ указывает на то, что данный столбец может иметь только уникальные значения. При попытке добавления повторяющегося значения в таблицу в поле с ключом UNIQUE, эта операция завершится ошибкой.
Уникальными можно задать как один, так и несколько столбцов.
---------------------------------------------------
FULLTEXT - Задает поля, к которым в последствии может быть применен полнотекстный поиск.
Полнотекстный поиск является средством MySQL, направленным на поиск нужной информации в базе данных и выводе результатов в соответствии с релевантностью найденных строк относительно поискового запроса.
Полнотестный поиск введен в MySQL начиная с версии 3.23.23 для таблиц типа MyISAM и только для полей типа VARCHAR и TEXT.
При индексировании полей с ключом FULLTEXT происходит индексация всего значения, а не его части (т.е. задать для индексации первые n-символов НЕЛЬЗЯ).
---------------------------------------------------
Вот все очень подрбно изложено (http://www.spravkaweb.ru/mysql/sql/createtable)