Задавайте вопросы, мы ответим
Вы не зашли.
Не понимаю, ключ стоит id2 (t1.uid), все нормально вроде. А вот от темп_сорт не избавиться. Помоги пожалуйста
SELECT t2.id FROM table1 AS t1 LEFT JOIN table2 AS t2 ON t1.sid = t2.id WHERE t1.uid = '12265' AND t1.status = '1' AND t2.login >= '1' ORDER BY t2.login_date DESC, t2.id ASC LIMIT 10
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ref id2 id2 5 const 40 Using where; Using temporary; Using filesort
1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 db.t1.sid 1 Using where
Отредактированно arhipov (12.12.2009 18:37:11)
Неактивен
Выборка производится по t1.id, а сортировка по t2.login_date. В такой ситуации первая таблица будет всегда сортироваться методом filesort, так как невозможно сортировать записи первой таблицы по ключу второй таблицы.
Неактивен
Я чуть перепутал запрос, исправил.
Как же мне тогда быть?
SELECT t2.id FROM table1 AS t1 LEFT JOIN table2 AS t2 ON t1.sid = t2.id WHERE t1.uid = '12265' AND t1.status = '1' AND t2.login >= '1' ORDER BY t2.login_date DESC, t2.id ASC LIMIT 10
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ref id2 id2 5 const 40 Using where; Using temporary; Using filesort
1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 db.t1.sid 1 Using where
Неактивен
Поменять структуру таблиц так, чтобы выборка выполнялась только из одной таблицы или смириться с тем, что запрос будет через filesort (в приведенных примерах сортируется всего 40 строк, что не займет много времени).
Неактивен
Как же мне ее поменять, разве такой запрос может быть построен как то по другому?
Дело в том что из первой таблицы ко второй, выборка должна быть обязательна
Отредактированно arhipov (12.12.2009 18:46:50)
Неактивен
Надо выяснить насколько важно оптимизировать этот запрос. Возможно он не ест производительность и тогда его надо оставить как есть. Если он критичен, то можно, например, login_date добавить в первую таблицу.
Неактивен
rgbeast написал:
Надо выяснить насколько важно оптимизировать этот запрос. Возможно он не ест производительность и тогда его надо оставить как есть. Если он критичен, то можно, например, login_date добавить в первую таблицу.
Это теоретически не возможно
Неактивен