Есть таблица (из CMS DataLife Engine )
CREATE TABLE dle_post (
`id` int(11) NOT NULL auto_increment,
`autor` varchar(40) NOT NULL default '',
`date` datetime NOT NULL default '0000-00-00 00:00:00',
`short_story` text NOT NULL,
`full_story` text NOT NULL,
`xfields` text NOT NULL,
`title` varchar(255) NOT NULL default '',
`descr` varchar(200) NOT NULL default '',
`keywords` text NOT NULL,
`category` varchar(200) NOT NULL default '0',
`alt_name` varchar(200) NOT NULL default '',
`comm_num` mediumint(8) unsigned NOT NULL default '0',
`allow_comm` tinyint(1) NOT NULL default '1',
`allow_main` tinyint(1) unsigned NOT NULL default '1',
`allow_rate` tinyint(1) unsigned NOT NULL default '1',
`approve` tinyint(1) NOT NULL default '0',
`fixed` tinyint(1) NOT NULL default '0',
`rating` smallint(5) NOT NULL default '0',
`allow_br` tinyint(1) NOT NULL default '1',
`vote_num` smallint(5) unsigned NOT NULL default '0',
`news_read` MEDIUMINT(8) unsigned NOT NULL default '0',
`votes` tinyint(1) NOT NULL default '0',
`access` varchar(150) NOT NULL default '',
`symbol` varchar(3) NOT NULL default '',
`flag` tinyint(1) NOT NULL default '1',
`editdate` varchar(15) NOT NULL default '',
`editor` varchar(40) NOT NULL default '',
`reason` varchar(255) NOT NULL default '',
`view_edit` tinyint(1) NOT NULL default '0',
`tags` VARCHAR(255) NOT NULL default '',
`metatitle` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`),
KEY `autor` (`autor`),
KEY `alt_name` (`alt_name`),
KEY `category` (`category`),
KEY `approve` (`approve`),
KEY `allow_main` (`allow_main`),
KEY `date` (`date`),
KEY `symbol` (`symbol`),
KEY `comm_num` (`comm_num`),
KEY `tags` (`tags`),
FULLTEXT KEY `short_story` (`short_story`,`full_story`,`xfields`,`title`)
) ENGINE=MyISAM /*!40101 DEFAULT CHARACTER SET cp1251_general_ci */
Есть запрос:
SELECT id, autor, date, short_story, SUBSTRING(full_story, 1, 15) as full_story, xfields, title, category, alt_name, comm_num, allow_comm, allow_rate, fixed, rating, vote_num, news_read, votes, flag, editdate, editor, reason, view_edit, tags
FROM dle_post
WHERE approve=1 AND allow_main=1
ORDER BY date DESC LIMIT 0,10
В таблице dle_post ~120 000 строк, и данный запрос выполняется больше 5-ти секунд (зависит от нагруженности MySQL)
Если отправить к примеру такой запрос:
SELECT id, autor, date, short_story, SUBSTRING(full_story, 1, 15) as full_story, xfields, title, category, alt_name, comm_num, allow_comm, allow_rate, fixed, rating, vote_num, news_read, votes, flag, editdate, editor, reason, view_edit, tags
FROM (SELECT * FROM dle_post LIMIT 0,100) AS sub_query
WHERE approve=1 AND allow_main=1
ORDER BY date DESC LIMIT 0,10
или просто убрать
WHERE approve=1 AND allow_main=1
в первом, то выполнятся они в доли секунды.
Так же если в первом запросе убрать LIMIT время выполнения не изменится.
Прихожу к выводу что в первом запросе WHERE проходит по всей таблице...
Пожалуйста подскажите как изменить запрос, чтобы WHERE находя 10 совпадений останавливался, если я правильно понял причину