Задавайте вопросы, мы ответим
Вы не зашли.
Вот запрос:
SELECT s.id,s.name,u.img,u.siteusername
FROM sift_sifts as s
INNER JOIN sift_rus_siteusers as u ON (u.id=s.user_id AND u.active=1)
WHERE s.active=1 ORDER BY s.create_time LIMIT 0,10
Умные люди! Скажите реально ли выполнять такой запрос, чтобы MySQL не использовал Using temporary; Using filesort. Перебирал разные комбинации индексов, но без толку (может из-за отсутствия в MySQL создавать индексы на полях из разных таблиц?).
И еще такой вопрос - MySQL выдерет пользователей (таблица sift_rus_siteusers) только для 10 записей с учетом LIMIT или пробежит по целой выборке?
Структуру таблиц приводить не буду - она достаточно большая, да и вопрос больше для ознакомления.
Неактивен
Реально. Структуру ответа приводить не буду, т.к. он достаточно большой.
Ответ больше для ознакомления
Либо задавайте вопрос, либо нет, промежуточного не бывает. Тут я бы
убрал условие u.active в WHERE, где ему полагается быть, после этого Вы
бы увидели, что хватит индексов на s(active,create_time) и u(id,active).
Неактивен
paulus написал:
Реально. Структуру ответа приводить не буду, т.к. он достаточно большой.
Ответ больше для ознакомления
Либо задавайте вопрос, либо нет, промежуточного не бывает. Тут я бы
убрал условие u.active в WHERE, где ему полагается быть, после этого Вы
бы увидели, что хватит индексов на s(active,create_time) и u(id,active).
Переписал запрос EXPLAIN SELECT s.id, s.name, u.img, u.siteusername
FROM sift_sifts AS s
USE INDEX ( active )
INNER JOIN sift_rus_siteusers AS u
USE INDEX ( id ) ON ( u.id = s.user_id )
WHERE s.active =1
AND u.active =1
ORDER BY s.create_time
LIMIT 0 , 10
Индекс id (id,active) для таблицы u. Индекс active(active,create_time) EXPLAIN не поправился(
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE s ref active active 1 const 15 Using temporary; Using filesort
1 SIMPLE u ALL id NULL NULL NULL 4 Using where; Using join buffer
Зачем здесь всю таблицу приводить? Что изменится? s.user_id и u.id mediumint(11)
Неактивен
Затем, что полная картина помогает решить проблему. Кусочки мозаики
позволяют мне додумывать не так, как у Вас. Например, у меня работает:
Неактивен
Спасибо, paulus. Оказывается все дело было в недостаточном количестве записей. Просто когда их было мало с самого начала - все было ок, когда их стало чуть больше стала появляться искомая проблема, а когда их стало много (вручную загонял) все стало опять как надо. Я не подумал, не думал что от количества данных (может и от них самих) EXPLAIN может отличаться.
Неактивен