Задать вопрос
@Noob--Saibot

Поиск по таблице, как сделать?

Привет всем. Подскажите пожалуйста, как сделать быстрый релевантный поиск по таблице с большим количеством строк. Есть таблица:
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 сек., что очень долго. Как сделать быстро?)
  • Вопрос задан
  • 361 просмотр
Подписаться 1 Оценить Комментировать
Ответ пользователя Даша Циклаури К ответам на вопрос (4)
dasha_programmist
@dasha_programmist
ex Software Engineer at Reddit TS/React/GraphQL/Go
на каком-нибудь значении полей типа xxx');drop table sale -- твой поиск закончится.
Ответ написан