У меня есть сайт, где посетители могут оставлять комментарии.Я хочу добавить возможность отвечать на комментарии (т.е. вложенные комментарии).
Сначала этот запрос был быстрым, но после того, как я заполнил таблицу существующими комментариями (около 30000), простой запрос, такой как:
SELECT c.id, c2.id
FROM (SELECT id
FROM swb_comments
WHERE pageId = 1411
ORDER BY id DESC
LIMIT 10) AS c
LEFT JOIN swb_comments AS c2 ON c.id = c2.parentId
заняло более 2 секунд, без дочерних комментариев (!).
Как мне оптимизировать такой запрос?Возможное решение будет http://www.ferdychristant.com/blog//articles/DOMM-7QJPM7 (выделите «Модель плоской таблицы выполнена правильно»), но это делает разбиение на страницы довольно трудным (как я могу ограничить 10 родительских комментариев в одном запросе?)
Таблица имеет 3 индекса: id, pageId и ParentId.
Заранее спасибо!
РЕДАКТИРОВАТЬ:
Добавлено определение таблицы.Это полное определение с некоторыми отличиями от вышеупомянутого запроса SELECT (т.е. pageId вместо numberId, чтобы избежать путаницы)
CREATE TABLE `swb_comments` (
`id` mediumint(9) NOT NULL auto_increment,
`userId` mediumint(9) unsigned NOT NULL default '0',
`numberId` mediumint(9) unsigned default NULL,
`orgId` mediumint(9) unsigned default NULL,
`author` varchar(100) default NULL,
`email` varchar(255) NOT NULL,
`message` text NOT NULL,
`IP` varchar(40) NOT NULL,
`timestamp` varchar(25) NOT NULL,
`editedTimestamp` varchar(25) default NULL COMMENT 'last edited timestamp',
`status` varchar(20) NOT NULL default 'publish',
`parentId` mediumint(9) unsigned NOT NULL default '0',
`locale` varchar(10) NOT NULL,
PRIMARY KEY (`id`),
KEY `userId` (`userId`),
KEY `numberId` (`numberId`),
KEY `orgId` (`orgId`),
KEY `parentId` (`parentId`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=34748 ;