Поиск по таблице, как сделать? Привет всем. Подскажите пожалуйста, как сделать быстрый релевантный поиск по таблице с большим количеством строк. Есть таблица: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 сек., что очень долго. Как сделать быстро?)
Для ускорения поиска в таблице с большим количеством строк можно использовать полнотекстовый поиск в 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 до версии, в которой улучшен механизм полнотекстового поиска.
Учитывая вышеперечисленные пункты, вы можете значительно повысить скорость выполнения поиска в таблице.
Для ускорения поиска в таблице с большим количеством строк можно использовать полнотекстовый поиск в 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 до версии, в которой улучшен механизм полнотекстового поиска.
Учитывая вышеперечисленные пункты, вы можете значительно повысить скорость выполнения поиска в таблице.