Ведущий %
в поиске - убийца здесь.Он отрицает использование любого индекса.
Единственное, о чем я могу думать, это разбить таблицу на основе длины кода.
Например, если введенный код состоит из 10 символовlong, затем сначала выполните поиск в таблице с 10-символьными кодами без начального знака процента, затем выполните поиск в таблице с 11-значными кодами, с ведущим знаком процента, а затем в таблице с 12-символьными кодами, с ведущим знаком процента иon.
Это избавляет вас от поиска во всех кодах длиной менее 10 символов, которые никогда не будут совпадать.Кроме того, вы можете использовать индекс для одного из поисков (первый).
Это также поможет сохранить размеры таблицы несколько меньшими.
Вы можете использовать UNION
чтобы выполнить все запросы одновременно, хотя вы, вероятно, захотите создать запрос динамически.
Вам также следует проверить, может ли индексирование FULLTEXT быть лучшим решением.