Всегда плохая идея использовать такие длинные строки в качестве индексов, но в случае, если вам действительно нужно искать его таким образом, подумайте, как вы фильтруете запрос, потому что MySQL не может выполнять аналогичные операции с индексами, поэтому такие условия, как WHERE value1 LIKE "%mytext%"
никогда не будет использовать индексы, вместо этого попробуйте поискать более короткую строку, чтобы MySQL мог преобразовать эту операцию в равенство.Например, используйте: value1 = "XXXXX"
, где "XXXXX" является частью строки.Чтобы определить наилучшую длину строки сравнения, проанализируйте селективность вашего поля value1 .
Также учтите, что несколько индексов полей, таких как (value1, value2)
, не будут использовать второе поле, если первое не совпадаетименно так.То, что это не плохой индекс, это просто, чтобы вы знали и понимали, как он работает.
Если это не сработает, другое решение может быть хранить value1 и value2 в новой таблице (например, table2) с автоматическим инкрементным полем id, затем добавьте внешний ключ от Table до table2 с использованием идентификаторов (например, my_long_id) и, наконец, создайте индекс дляТаблица 2, как: my_idx (value1, value2)
.Поиск будет выглядеть примерно так:
SELECT t1.*
FROM
table2 as t2
INNER JOIN Table as t1 ON (t1.my_long_id = t2.id)
WHERE
t2.value1 = "your_string"
Убедитесь, что таблица2 имеет индекс типа (value1, value2)
, а таблица имеет основной индекс (my_long_id)
.
. В качестве окончательной рекомендации добавьтеПоле 'id' с AUTO_INCREMENT в качестве PRIMARY KEY и (value1, values2) в качестве уникального / обычного ключа.Это очень помогает, потому что B-Tree хранит отсортированные индексы, поэтому использование строки из 100 символов приводит к потере ввода-вывода при такой сортировке.InnoDB определяет наилучшую позицию для этого индекса при вставке, возможно, ему потребуется переместить некоторые индексы на другие страницы, чтобы освободить место для нового.С автоинкрементным значением это проще и дешевле, потому что никогда не нужно будет делать такие движения.