Индекс UNIQUE позволяет указать на то, что все вводимые в определенное поле значения должны быть уникальными, т.е. они не могут повторяться ни в одной из последующих записей. Этот индекс задается модификатором UNIQUE в команде CREATE TABLE или CREATE INDEX. Когда поле объявлено как UNIQUE, любая попытка ввести повторяющееся значение в это поле приводит к ошибке.
Индекс unique
Индекс unique
Индекс fulltext
Начиная с версии 3.23.23, MySQL поддерживает специальный индекс, разработанный для полнотекстового поиска в таблицах MyISAM - это индекс FULLTEXT. Данный индекс позволяет производить запрос по проиндексированным столбцам с произвольными текстовыми строками, и возвращает записи, содержащие значения, подобные искомым строкам. При таком полнотекстовом поиске, в MySQL определяется оценка подобия между записями таблицы и искомой строкой, при этом возвращаются только те записи, которые имеют наивысшую оценку подобия.
На заметку
Индексы FULLTEXT поддерживаются только таблицами типа MyISAM. Рассмотрим следующий пример.
Индекс unique
 Аргумент, который передается функции MATCH(), представляет собой список полей, которые обязательно должны входить в какой-то индекс FULLTEXT таблицы. Функция MATCH() дает оценку подобия между искомой строкой и указанными полями по каждой записи в таблице. Согласно руководству по MySQL, которое находится на Web-узле http://www.mysql.com/documentation/, оценка подобия вычисляется на основе ряда параметров: 
■ количество слов в строке;
■ количество уникальных слов в строке;
■ общее количество слов в наборе;
■ количество строк, в которых содержится определенное слово.
Оценка подобия 0 свидетельствует о том, что подобие между сравниваемыми значениями отсутствует полностью.
Слова, которые встречаются более чем в 50% всех записей таблицы (т.н. стоп-слова), игнорируются и считаются несущественными при полнотекстовом поиске. Аналогично, словам, которые появляются в тексте чаще, присваивается меньший вес в индексе, чем словам, которые появляются чаще.
Список стоп-слов с минимальной и максимальной длиной слова принимается во внимание в процессе принятия решения о том, какие слова необходимо включить в индекс FULLTEXT. Его можно задать переменными настройки сервера ft_stopword_file, ft_min_word_len и ft_max_word_len. Подробнее о том, каким образом меняются переменные сервера, можно узнать в главе 13, "Администрирование и настройка".
Обычно при поиске записей с высокой оценкой подобия функция MATCH() используется в предложении WHERE.
Рассмотрим следующий пример.
Индекс unique
Логический поиск
Начиная с версии 4.0.1, у MySQL появилась возможность осуществлять логический поиск по индексам FULLTEXT. Для этого необходимо добавить модификатор IN BOOLEAN MODE и один (или более) логический оператор в аргумент функции AGAINST() . Это показано в следующих примерах. В первом примере возвращаются все записи, которые содержат слова crime и suspense в поле synopsis, а во втором примере перечисляются все записи, в которых в поле synopsis содержатся слова romance, но отсутствуют слова teenage и period.
Индекс unique
Индекс unique
Начнем сначала... почти с начала
После изменения на сервере переменных, влияющих на индекс FULLTEXT, возникает необходимость в перестройке индекса. Она выполняется путем удаления и повторного создания индекса. Однако руководство по MySQL предлагает и более быструю альтернативу: использование команды REPAIR TABLE с аргументом QUICK для автоматической перестройки индекса:
Индекс unique
Заметим, что индексы типа FULLTEXT работают довольно быстро, причем особенно хорошо они работают с большими таблицами. Таблицы небольшого размера не имеют достаточного разброса значений для оптимальной работы индекса. Кроме того, они не полностью оптимизированы для работы в различных операционных средах, поэтому ими нужно пользоваться с осторожностью.
Совет
Для более быстрого полнотекстового индексирования индекс FULLTEXT лучше создавать на основе уже существующей и заполненной данными таблице с помощью команд CREATE INDEX или ALTER TABLE, а не во время создания таблицы.