У меня есть карта от строк до целых чисел. Чтобы сохранить эту карту в базе данных MySQL, я создал следующую таблицу:
CREATE TABLE map(
Argument TEXT NOT NULL,
Image INTEGER NOT NULL
)
Я выбрал тип TEXT для аргумента, потому что его длина непредсказуема, в настоящее время самая длинная запись имеет 2290 символов, а средняя длина составляет 88 символов.
После того, как я столкнулся с проблемами производительности, я попытался добавить индекс для столбца Argument
, но обнаружил, что должен указать длину, поэтому, чтобы избежать этого ограничения, я добавил новый целочисленный столбец, содержащий значения хеша (md5 или другое) значений столбца аргумента.
ALTER TABLE map ADD COLUMN ArgumentHash INTEGER;
И комбинированный индекс
CREATE INDEX argument_index USING HASH ON map(ArgumentHash, Argument(80));
С тех пор проблемы с производительностью исчезли. Я хотел бы спросить, является ли это правильным способом решения этой проблемы.