Помогите оптимизировать запрос, пожалуйста
Есть таблица
[sql]CREATE TABLE `Board` (
`id` int(10) unsigned NOT NULL auto_increment,
`date` datetime default NULL,
`title` varchar(64) default NULL,
`author` varchar(32) default NULL,
`body` text,
`root` int(11) default NULL,
PRIMARY KEY (`id`),
KEY `date` (`date`),
KEY `root` (`root`)
)[/sql]
И такой вот запрос
[sql]explain SELECT max(b1.date), b2.id FROM Board b1 LEFT JOIN Board b2 on b2.id=b1.root GROUP BY b1.root[/sql]
Объясните дураку, плиз
1. можно ли оптимизировать это?
2. может быть, выбирать надо вообще по-другому?
Это форум, на примитивной однотабличной основе.
в поле root пишется id первого сообщения.
Хочется построить форум одним запросом.
Запрос приведен упрощенный, но рабочий.
Я рассуждаю как? группируем таблицу по root и джойним на себя же по id=root чтобы выбрать заголовок и автора первого сообщения.
Есть таблица
[sql]CREATE TABLE `Board` (
`id` int(10) unsigned NOT NULL auto_increment,
`date` datetime default NULL,
`title` varchar(64) default NULL,
`author` varchar(32) default NULL,
`body` text,
`root` int(11) default NULL,
PRIMARY KEY (`id`),
KEY `date` (`date`),
KEY `root` (`root`)
)[/sql]
И такой вот запрос
[sql]explain SELECT max(b1.date), b2.id FROM Board b1 LEFT JOIN Board b2 on b2.id=b1.root GROUP BY b1.root[/sql]
Код:
+-------+--------+---------------+---------+---------+---------+------+---------------------------------+
| table | type | possible_keys | key | key_len | ref | rows | Extra |
+-------+--------+---------------+---------+---------+---------+------+---------------------------------+
| b1 | ALL | NULL | NULL | NULL | NULL | 4999 | Using temporary; Using filesort |
| b2 | eq_ref | PRIMARY | PRIMARY | 4 | b1.root | 1 | Using index |
+-------+--------+---------------+---------+---------+---------+------+---------------------------------+
1. можно ли оптимизировать это?
2. может быть, выбирать надо вообще по-другому?
Это форум, на примитивной однотабличной основе.
в поле root пишется id первого сообщения.
Хочется построить форум одним запросом.
Запрос приведен упрощенный, но рабочий.
Я рассуждаю как? группируем таблицу по root и джойним на себя же по id=root чтобы выбрать заголовок и автора первого сообщения.