У меня проблема с созданием индекса, описанного в ответе на этот вопрос: sql уникальное ограничение для комбинации из 2 столбцов
Я использую MySql, и я получил синтаксическую ошибку, моя версия этого запроса выглядит следующим образом:
CREATE UNIQUE INDEX ON friends (LEAST(userID, friendID), GREATEST(userID, friendID));
LEAST и GREATEST функции доступны в MySql, но, возможно, синтаксис должен быть другим?
Я пытался сделать версию ALTER TABLE, но она не сработала.
В MySQL вы не можете использовать функции в качестве значений для индексов.
В документации явно не говорится об этом, однако это базовая характеристика индекса, поддерживающая только «фиксированные» данные:
Индексы используются для быстрого поиска строк с конкретными значениями столбцов. Без индекса MySQL должен начинаться с первой строки, а затем читать всю таблицу, чтобы найти соответствующие строки.
Как правило, эти «фиксированные» данные представляют собой отдельный столбец / поле; со строковыми полями (такими как varchar
или же text
) у вас может быть префикс-индекс, а не весь столбец. Проверять, выписываться CREATE INDEX
для получения дополнительной информации об этом.
Уникальный индекс, который вы пытаетесь создать в своем примере, будет иметь одну запись; это не очень полезный индекс, так как он не помогает для поиска по всей таблице. Однако, если вы индексируете свою таблицу на userID, friendID
, с использованием LEAST()
а также GREATEST()
функции в SELECT
Оператор будет оптимизирован благодаря самому индексу, поэтому в данном случае это может быть то, что вам нужно.
Других решений пока нет …