Поиск по таблице, как сделать? Привет всем. Подскажите пожалуйста, как сделать быстрый релевантный поиск по таблице с большим количеством строк. Есть таблица: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
163 +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 Апр 2024 в 13:18
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир