2014-02-03 2 views
0

У меня есть таблица INNODB и вам нужно искать в столбце VARCHAR, но поиск выполняется очень медленно. Я не могу добавить индекс FULLTEXT :(И MYISAM не является опцией.поисковая оптимизация mysql с шестнадцатеричной функцией

Некоторые ребята дали мне совет использовать HEX, как код ниже. Правильно ли это работает? Я не вижу никакого прогресса в . мое приложение

 
SELECT * 
FROM order_line 
WHERE HEX(description) LIKE '%6B616C6B7A616E64737465656E%' 
+0

Я не могу придумать никаких причин для этого лучше. Также с MySQL 5.6 вы можете использовать индексы FULLTEXT для InnoDB. – Vatev

+0

Используемая функция в состоянии? => (99%) Нет использованного индекса –

+0

Это не будет работать лучше и, скорее всего, будет хуже. –

ответ

0

Даже если таблица в вопросе требует InnoDB и вы ограничены устаревшей версию MySQL по какой-то причине, есть по крайней мере два возможные улучшения (и третьи, который основывается на одном из них):

  1. Скопируйте первичный ключ (ы) и текстовый столбец с возможностью поиска в таблицу MyISAM с полнотекстовым индексом и выполнить поиск по этому вопросу. Это, очевидно, потребует обновления таблицы поиска каждый раз, когда оригинал обновляется.

  2. Вы можете создавать таблицы кэша, сохраняющие информацию о выполненных поисковых запросах и их ударах для последующего повторного использования (один для отслеживания кешированных запросов, а другой - для кеширования фактических результатов). Опять же, это потребует, чтобы вы периодически обновляли кеш или полностью очищали его.

  3. Поскольку вы используете LIKE для поиска, вы можете использовать решение №2 с дополнительным взломом: сначала проверьте, есть ли кешированные поиски подстрок текущего поискового запроса и ограничивают область поиска элементами, которые соответствуют только те предыдущие поиски.

+0

привет .. THX для вашего ответа, я сейчас работаю над пунктом 2 .. надеюсь, это работает для моего приложения – user3223133

Смежные вопросы