Народ помогите с оптимизацией запроса. Есть таблица куда добавляют свои записи юзеры, пример [sql]CREATE TABLE `last_message` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `user` CHAR(10) NOT NULL, `message` TEXT NOT NULL, `data` DATETIME NOT NULL, PRIMARY KEY (`id`), INDEX `user` (`user`) ) ENGINE=MyISAM [/sql] Делаю запрос на выборку последних вставленных записей юзерами [sql] SELECT*FROM `last_message` GROUP BY user DESC [/sql] EXPLAIN: [sql] table type possible_keys key key_len ref rows Extra 1 SIMPLE last_message ALL (NULL) (NULL) (NULL) (NULL) 29 Using temporary; Using filesort [/sql] Почему запрос затрагивает все 29 записей в таблице? Нельзя ли этот запрос как то улучшить?
я бы сделал у каждого юзера в профиле доп два поля - номер и дату последнего поста. и по этим полям бы выбирал. так было бы просто и быстро.
Есть такое решение задачи: [sql] SELECT* FROM `last_message` WHERE `id` IN( SELECT MAX(`id`) FROM `last_message` GROUP BY user) [/sql] НО, проверив это запрос EXPLAINom хотелось бы его улучшить =) [sql] id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY last_message ALL NULL NULL NULL NULL 30 Using where 2 DEPENDENT SUBQUERY last_message index NULL symbol 30 NULL 1 Using filesort [/sql]