SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 12.12.2009 18:28:24

arhipov
Участник
Зарегистрирован: 16.04.2009
Сообщений: 4

Запрос с ключами не оптимизируется

Не понимаю, ключ стоит 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)

Неактивен

 

#2 12.12.2009 18:36:54

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Запрос с ключами не оптимизируется

Выборка производится по t1.id, а сортировка по t2.login_date. В такой ситуации первая таблица будет всегда сортироваться методом filesort, так как невозможно сортировать записи первой таблицы по ключу второй таблицы.

Неактивен

 

#3 12.12.2009 18:38:20

arhipov
Участник
Зарегистрирован: 16.04.2009
Сообщений: 4

Re: Запрос с ключами не оптимизируется

Я чуть перепутал запрос, исправил.
Как же мне тогда быть?



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

Неактивен

 

#4 12.12.2009 18:43:38

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Запрос с ключами не оптимизируется

Поменять структуру таблиц так, чтобы выборка выполнялась только из одной таблицы или смириться с тем, что запрос будет через filesort (в приведенных примерах сортируется всего 40 строк, что не займет много времени).

Неактивен

 

#5 12.12.2009 18:46:09

arhipov
Участник
Зарегистрирован: 16.04.2009
Сообщений: 4

Re: Запрос с ключами не оптимизируется

Как же мне ее поменять, разве такой запрос может быть построен как то по другому?
Дело в том что из первой таблицы ко второй, выборка должна быть обязательна

Отредактированно arhipov (12.12.2009 18:46:50)

Неактивен

 

#6 12.12.2009 18:48:29

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Запрос с ключами не оптимизируется

Надо выяснить насколько важно оптимизировать этот запрос. Возможно он не ест производительность и тогда его надо оставить как есть. Если он критичен, то можно, например, login_date добавить в первую таблицу.

Неактивен

 

#7 12.12.2009 18:50:26

arhipov
Участник
Зарегистрирован: 16.04.2009
Сообщений: 4

Re: Запрос с ключами не оптимизируется

rgbeast написал:

Надо выяснить насколько важно оптимизировать этот запрос. Возможно он не ест производительность и тогда его надо оставить как есть. Если он критичен, то можно, например, login_date добавить в первую таблицу.

Это теоретически не возможно

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson