Поиск FULLTEXT (Mysql) в первый раз идет медленно, а затем со второго раза становится намного быстрее - PullRequest
0 голосов
/ 17 июня 2010

У меня есть таблица с 4000 записями (с которой проще справиться с помощью полнотекстового поиска).когда поисковый запрос выполняется впервые, он намного медленнее.Это занимает от 5 до 10 секунд.Тогда это становится быстрее.Если сайт остается неактивным в течение 10 или 15 минут, и когда я пытаюсь выполнить запрос снова, он замедляется.

Я использую mysql + PHP.Я думаю, это проблема кеширования.Наш сайт размещен на стороннем сервере, на котором у меня нет доступа к кешу.

Есть ли обходной путь для моей проблемы.

Заранее спасибо!

Редактировать:

Привет, Спасибо за ваш ответ.Вот мой запрос.

SELECT PRODUCT_2_CATEGORY.PRODUCT_ID FROM PRODUCT_2_CATEGORY, PRODUCT, MERCHANT WHERE PRODUCT_2_CATEGORY.PRODUCT_ID = PRODUCT.ID AND PRODUCT.PRO_STATUS = 'active' И PRODUCT.MERCHANT_MERCHANT_MERCHANT_MERCHANT_MERCHT'active' AND (CAT_ID = '1' ИЛИ ​​CAT_ID = '1004' ИЛИ ​​CAT_ID = '1005' ИЛИ ​​CAT_ID = '1006' ИЛИ ​​CAT_ID = '1007' ИЛИ ​​CAT_ID = '1008' ИЛИ ​​CAT_ID = '1002' ИЛИ ​​CAT_ID = '1003 'ИЛИ CAT_ID = '45' ИЛИ ​​CAT_ID = '46 'ИЛИ CAT_ID = '74' ИЛИ ​​CAT_ID = '75 'ИЛИ CAT_ID = '76' ИЛИ ​​CAT_ID = '49 'ИЛИ CAT_ID = '50' ИЛИ ​​CAT_ID = '77 'ИЛИ CAT_ID = '78 'ИЛИ CAT_ID = '79' ИЛИ ​​CAT_ID = '80 'ИЛИ CAT_ID = '81' ИЛИ ​​CAT_ID = '82 'ИЛИ CAT_ID = '83' ИЛИ ​​CAT_ID = '84 'ИЛИ CAT_ID = '47' ИЛИ ​​CAT_ID= '89 'ИЛИ CAT_ID = '51' ИЛИ ​​CAT_ID = '52 'ИЛИ CAT_ID = '88' ИЛИ ​​CAT_ID = '87 'ИЛИ CAT_ID = '86' ИЛИ ​​CAT_ID = '85 'ИЛИ CAT_ID = '48' ИЛИ ​​CAT_ID = '53 'ИЛИ CAT_ID = '54' ИЛИ ​​CAT_ID = '90 'ИЛИ CAT_ID =' 200 'ИЛИ CAT_ID = '91' ИЛИ ​​CAT_ID = '92 'ИЛИ CAT_ID = '93' ИЛИ ​​CAT_ID = '94 'ИЛИ CAT_ID = '11'ИЛИ CAT_ID = '95 'ИЛИ CAT_ID = '98' ИЛИ ​​CAT_ID = '99 'ИЛИ CAT_ID =' 100 'ИЛИ CAT_ID =' 101 'ИЛИ CAT_ID = '96' ИЛИ ​​CAT_ID = '102'ИЛИ CAT_ID = '103' ИЛИ ​​CAT_ID = '104' ИЛИ ​​CAT_ID = '105' ИЛИ ​​CAT_ID = '106' ИЛИ ​​CAT_ID = '97 'ИЛИ CAT_ID =' 107 'ИЛИ CAT_ID =' 108 'ИЛИ CAT_ID =' 109 'ИЛИ CAT_ID= '110' ИЛИ ​​CAT_ID = '114' ИЛИ ​​CAT_ID = '119' ИЛИ ​​CAT_ID = '120' ИЛИ ​​CAT_ID = '121' ИЛИ ​​CAT_ID = '115' ИЛИ ​​CAT_ID = '122' ИЛИ ​​CAT_ID = '123' ИЛИ ​​CAT_ID = '124 'ИЛИ CAT_ID =' 125 'ИЛИ CAT_ID =' 116 'ИЛИ CAT_ID =' 127 'ИЛИ CAT_ID =' 128 'ИЛИ CAT_ID =' 129 'ИЛИ CAT_ID =' 117 'ИЛИ CAT_ID =' 130 'ИЛИ CAT_ID =' 131 'ИЛИ CAT_ID = '118' ИЛИ ​​CAT_ID = '111' ИЛИ ​​CAT_ID = '132' ИЛИ ​​CAT_ID = '136' ИЛИ ​​CAT_ID = '137' ИЛИ ​​CAT_ID = '138' ИЛИ ​​CAT_ID = '139' ИЛИ ​​CAT_ID = '140' ИЛИ ​​CAT_ID= '133' ИЛИ ​​CAT_ID = '141' ИЛИ ​​CAT_ID = '142' ИЛИ ​​CAT_ID = '143' ИЛИ ​​CAT_ID = '144' ИЛИ ​​CAT_ID = '145' ИЛИ ​​CAT_ID = '146' ИЛИ ​​CAT_ID = '134' ИЛИ ​​CAT_ID = '147 'ИЛИ CAT_ID =' 148 'ИЛИ CAT_ID =' 149 'ИЛИ CAT_ID =' 150 'ИЛИ CAT_ID =' 151 'ИЛИ CAT_ID =' 135 'ИЛИ CAT_ID =' 152 'ИЛИ CAT_ID =' 153 'ИЛИ CAT_ID =' 154 'ИЛИ CAT_ID = '155' ИЛИ ​​CAT_ID = '156' ИЛИ ​​CAT_ID = '64 'ИЛИ CAT_ID =' 158 'ИЛИ CAT_ID = '70' ИЛИ ​​CAT_ID = '164' ИЛИ ​​CAT_ID = '71 'ИЛИ CAT_ID =' 165 'ИЛИ CAT_ID= '159' ИЛИ ​​CAT_ID = '166' ИЛИ ​​CAT_ID = '167' ИЛИ ​​CAT_ID = '168' ИЛИ ​​CAT_ID = '169 'ИЛИ CAT_ID =' 160 'ИЛИ CAT_ID = '73' ИЛИ ​​CAT_ID = '170' ИЛИ ​​CAT_ID = '172' ИЛИ ​​CAT_ID = '173' ИЛИ ​​CAT_ID = '174' ИЛИ ​​CAT_ID = '161' ИЛИ ​​CAT_ID = '175'ИЛИ CAT_ID = '176' ИЛИ ​​CAT_ID = '177' ИЛИ ​​CAT_ID = '178' ИЛИ ​​CAT_ID = '162' ИЛИ ​​CAT_ID = '179' ИЛИ ​​CAT_ID = '180' ИЛИ ​​CAT_ID = '181' ИЛИ ​​CAT_ID = '182' ИЛИ ​​CAT_ID= '183' ИЛИ ​​CAT_ID = '163' ИЛИ ​​CAT_ID = '184' ИЛИ ​​CAT_ID = '192' ИЛИ ​​CAT_ID = '191' ИЛИ ​​CAT_ID = '190' ИЛИ ​​CAT_ID = '189' ИЛИ ​​CAT_ID = '188' ИЛИ ​​CAT_ID = '187 'ИЛИ CAT_ID =' 186 'ИЛИ CAT_ID =' 185 'ИЛИ CAT_ID =' 193 'ИЛИ CAT_ID =' 112 'ИЛИ CAT_ID =' 113 'ИЛИ CAT_ID = '65' ИЛИ ​​CAT_ID = '66 'ИЛИ CAT_ID = '67'ИЛИ CAT_ID = '68 'ИЛИ CAT_ID = '69') И СООТВЕТСТВОВАТЬ (PRODUCT.TITLE) ПРОТИВ ('рубашка' В БУЛ. РЕЖИМЕ) ЗАКАЗАТЬ ПО PRODUCT.TITLE ASC LIMIT 0, 12

Наш сайт размещен навеб-сервер третьей части (панель управления Plesk).Поэтому я не уверен, можно ли устанавливать другие программы.

Наш сайт - 2010.shoppingstrip.com.au.Этот запрос будет выполнен при поиске чего-либо.

Спасибо

Ответы [ 2 ]

1 голос
/ 17 июня 2010

Индексация вашей таблицы может иметь огромное значение.На недавней работе с 1,5 миллионами записей в базе данных MySql базовый запрос с объединением занимал более 35 минут.После индексации таблицы (на это ушло около 3-4 минут) запрос выполняется за 4 секунды.

Запросы также должны быть проверены на возможные улучшения.Например, экзотические объединения могут значительно удлинить запросы.Кроме того, выполнение чрезмерных циклов foreach для одновременного захвата записи может вызвать чрезмерную задержку.В зависимости от ваших обстоятельств вы можете настроить запрос для поиска только определенных, важных элементов, чтобы добиться лучшей производительности.

Чтобы протестировать ваш запрос, создайте копию сервера WAMP на локальном компьютере.Импортируйте скрипт и базу данных и запустите несколько тестов.Это может изолировать, является ли ваш запрос неэффективным или проблема связана с сервером.

Рассмотрите также методы поиска, которые вы используете.Например, поиск значения в mysql может быть выполнен с помощью таких операторов, как «LIKE», «=», «REGEXP» и т. Д. Поэкспериментируйте, чтобы улучшить производительность и уменьшить время загрузки.

Наконец, если все остальное не удаетсяВы можете прибегнуть к решению для кэширования или более надежному хостингу баз данных.4000 записей не очень велики в общей схеме вещей, и вы не должны испытывать такое медленное время загрузки.Мне повезло с кешированием с помощью встроенной в Zend Framework системы кеширования.

Если вы все еще не получили ничего, опубликуйте образец вашего запроса, и мы сможем отправиться в него по городу!

0 голосов
/ 17 июня 2010

MySQL действительно плохо подходит для полнотекстового поиска, как с точки зрения производительности, так и простоты использования.

Я бы порекомендовал вам использовать Sphinx для этого.

...