Grapefruit Lips
Новичок
Здравствуйте,
есть таблицы: *friends* (кто с кем дружит) и *posts* - сообщения.
т.е. у людей на странице должны появлятся только свои сообщения и сообщения их друзей.
подскажите, пожалуйста, как на таблицы правильно поставить индексы и сделать правильный запрос с сортировкой?
такой запрос просто летает:
запрос выполняется за 0,0005 сек.
Но, если добавить сортировку (надо, чтобы последние сообщения были самыми первыми):
то происходит ужас, запрос выполняется очень много минут...
Подскажите, как это можно сделать с сортировкой? Понятно что происходит фул-скан, но как этого избежать?
Спасибо
есть таблицы: *friends* (кто с кем дружит) и *posts* - сообщения.
т.е. у людей на странице должны появлятся только свои сообщения и сообщения их друзей.
подскажите, пожалуйста, как на таблицы правильно поставить индексы и сделать правильный запрос с сортировкой?
Код:
CREATE TABLE IF NOT EXISTS `posts` (
`id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL default '0',
`date` datetime NOT NULL default '0000-00-00 00:00:00',
........
UNIQUE KEY `id` (`id`),
KEY `uiddy` (`user_id`),
KEY `useridid` (`user_id`,`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
CREATE TABLE IF NOT EXISTS `friends` (
`uid` int(11) NOT NULL,
`friend_id` int(11) NOT NULL,
UNIQUE KEY `uid` (`uid`,`friend_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
такой запрос просто летает:
Код:
SELECT * FROM friends f
LEFT JOIN posts p ON f.friend_id=p.user_id
WHERE f.uid=1 LIMIT 0,10;
Код:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE f ref uid uid 4 const 127 Using index
1 SIMPLE p ref uiddy,useridid uiddy 4 master.f.friend_id 205
Но, если добавить сортировку (надо, чтобы последние сообщения были самыми первыми):
Код:
SELECT * FROM friends f
LEFT JOIN posts p ON f.friend_id=p.user_id
WHERE f.uid=1 ORDER BY p.id DESC LIMIT 0,10;
Код:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE f ref uid uid 4 const 127 Using index; Using temporary; Using filesort
1 SIMPLE p ref uiddy,useridid uiddy 4 master.f.following 205
Спасибо