Поиск по таблице, как сделать? Привет всем. Подскажите пожалуйста, как сделать быстрый релевантный поиск по таблице с большим количеством строк. Есть таблица:CREATE TABLE `sale` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`brand` varchar(255) DEFAULT NULL,
`gname` varchar(255) DEFAULT NULL,
`sku` varchar(255) DEFAULT NULL,
`price` varchar(255) DEFAULT NULL,
`description` text,
`tagdescription` varchar(255) DEFAULT NULL,
`tagtitle` varchar(255) DEFAULT NULL,
`tagkeywords` varchar(255) DEFAULT NULL,
`adddate` datetime DEFAULT NULL,
`image` varchar(255) DEFAULT NULL,
`photos` text,
`url` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `url` (`url`) USING BTREE,
FULLTEXT KEY `brand` (`brand`),
FULLTEXT KEY `sku` (`sku`),
FULLTEXT KEY `description` (`description`),
FULLTEXT KEY `tagdescription` (`tagdescription`),
FULLTEXT KEY `tagtitle` (`tagtitle`),
FULLTEXT KEY `tagkeywords` (`tagkeywords`),
FULLTEXT KEY `price` (`price`),
FULLTEXT KEY `gname` (`gname`)
) ENGINE=MyISAM AUTO_INCREMENT=1734271 DEFAULT CHARSET=utf8;
Делаю в ней поиск на php таким образом:$result = mysql_query("SELECT *, MATCH brand AGAINST ('".$_GET['q']."') + MATCH gname AGAINST ('".$_GET['q']."') + MATCH description AGAINST ('".$_GET['q']."') + MATCH tagdescription AGAINST ('".$_GET['q']."') as relev FROM sale HAVING relev>0 ORDER BY relev DESC");
При количестве записей 1 734 271, поиск выполняется за 4.1535229682922 сек., что очень долго. Как сделать быстро?)

21 Авг 2019 в 06:27
142 +1
0
Ответы
1

Для ускорения поиска в таблице с большим количеством строк можно использовать полнотекстовый поиск в MySQL. Однако, для более эффективного выполнения запроса, можно произвести некоторые оптимизации:

Попробуйте использовать индексы вместо полнотекстового поиска. Для этого можно добавить обычные индексы на столбцы brand, gname, description, tagdescription и использовать запрос с оператором LIKE:$result = mysql_query("SELECT * FROM sale WHERE brand LIKE '%".$_GET['q']."%' OR gname LIKE '%".$_GET['q']."%' OR description LIKE '%".$_GET['q']."%' OR tagdescription LIKE '%".$_GET['q']."'");

Проанализируйте, какие столбцы необходимы для поиска, чтобы не загружать лишнюю информацию. Можно сократить список столбцов в запросе, оставив только необходимые.

Подумайте о том, как можно оптимизировать структуру таблицы. Возможно, стоит разбить информацию на несколько таблиц с помощью нормализации данных.

Попробуйте использовать кэширование результатов поиска для повторных запросов.

Используйте асинхронные запросы или постраничный вывод результатов, чтобы ускорить загрузку страницы.

Рассмотрите возможность обновления MySQL до версии, в которой улучшен механизм полнотекстового поиска.

Учитывая вышеперечисленные пункты, вы можете значительно повысить скорость выполнения поиска в таблице.

20 Апр в 13:18
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир