Есть БД, в ней две таблицы: orders и in
В таблице orders - 89 257 строк, весит 1.7 ГБ
В таблице in - 44 610 строкй, весит 6.1 МБ
Такой запрос выполняется: 49.9315 сек.
SELECT * FROM `orders` AS orders, in AS regions WHERE orders.in = regions.index AND (regions.region = 'ЧЕЛЯБИНСКАЯ ОБЛАСТЬ' OR regions.autonom = 'ЧЕЛЯБИНСКАЯ ОБЛАСТЬ' OR regions.region = 'ТЮМЕНСКАЯ ОБЛАСТЬ' OR regions.autonom = 'ТЮМЕНСКАЯ ОБЛАСТЬ' OR regions.region = 'ХАНТЫ-МАНСИЙСКИЙ-ЮГРА АВТОНОМНЫЙ ОКРУГ' OR regions.autonom = 'ХАНТЫ-МАНСИЙСКИЙ-ЮГРА АВТОНОМНЫЙ ОКРУГ' OR regions.region = 'ЯМАЛО-НЕНЕЦКИЙ АВТОНОМНЫЙ ОКРУГ' OR regions.autonom = 'ЯМАЛО-НЕНЕЦКИЙ АВТОНОМНЫЙ ОКРУГ' OR regions.region = 'СВЕРДЛОВСКАЯ ОБЛАСТЬ' OR regions.autonom = 'СВЕРДЛОВСКАЯ ОБЛАСТЬ' OR regions.region = 'КУРГАНСКАЯ ОБЛАСТЬ' OR regions.autonom = 'КУРГАНСКАЯ ОБЛАСТЬ') AND ((orders.zakaz LIKE '%быт%' OR orders.more LIKE '%быт%') AND (orders.zakaz LIKE '%техник%' OR orders.more LIKE '%техник%')) AND ((orders.status_zakaza LIKE '%Ожидает начала торгов%' OR orders.status_zakaza LIKE '%опубликов%' OR orders.status_zakaza LIKE '%ожидание торгов%' OR orders.status_zakaza LIKE '%идет приём заявок%' OR orders.status_zakaza LIKE '%идут торги%' OR orders.status_zakaza = '') and ((date_torg = date_torg_end AND date_add(date_torg, interval 2 month) >= now()) OR date_torg_end >= now())) ORDER BY `datepubl` DESC LIMIT 0, 50
Почему так долго?? Как можно оптимизировать sql код, чтобы запрос выполнялся не более 10 секунд?
Вот структура таблицы orders:
CREATE TABLE IF NOT EXISTS `orders` (
`id` int(11) NOT NULL auto_increment,
`firm` text NOT NULL COMMENT '',
`zakaz` text NOT NULL COMMENT '',
`platform` varchar(255) NOT NULL COMMENT '',
`sposob` varchar(255) NOT NULL COMMENT '',
`datepubl` datetime NOT NULL COMMENT '',
`izv` varchar(255) NOT NULL COMMENT '',
`more` longtext NOT NULL COMMENT '',
`cena` bigint(20) NOT NULL default '0' COMMENT '',
`linkmore` varchar(255) NOT NULL COMMENT '',
`in` varchar(255) default NULL COMMENT '',
`docs` text NOT NULL COMMENT '',
`date_torg` datetime NOT NULL COMMENT '',
`date_torg_end` datetime NOT NULL COMMENT '',
`date_izm_izv` date NOT NULL COMMENT '',
`status_zakaza` varchar(255) NOT NULL COMMENT '',
`okdp` int(11) NOT NULL default '0' COMMENT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=94215 ;
Структура таблицы in:
CREATE TABLE IF NOT EXISTS `in` (
`index` int(6) NOT NULL,
`opsname` varchar(255) NOT NULL,
`opstype` varchar(255) NOT NULL,
`opssubm` varchar(255) NOT NULL,
`region` varchar(255) NOT NULL,
`autonom` varchar(255) NOT NULL,
`area` varchar(255) NOT NULL,
`city` varchar(255) NOT NULL,
`city_1` varchar(255) NOT NULL,
`actdate` datetime NOT NULL,
`indexold` int(6) NOT NULL,
PRIMARY KEY (`index`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;