SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 29.01.2011 15:35:58

velo
Участник
Зарегистрирован: 05.04.2009
Сообщений: 2

Помогите с ключами для оптимизации JOIN

Cобственно сам запрос составляет около 4,5 сек.
Смысл JOIN-ов это наличие элементов, т.е. по сути нужно получить есть или нет нужного в присоединенной таблице.

Сейчас запрос имеет вид:

SELECT m.*, u.username as create_username, u.user_id as create_user_id, u.user_colour as create_user_colour, f.album_link, f.video, b.blog_link, f.album_link, v.album_link AS count_video, me.meeting_geo1, me.meeting_geo2, me.meeting_geo3, mf.image_id AS count_image, gp.gpslink_id AS count_gpslink
FROM phpbb3_marshrut_data m
LEFT JOIN phpbb3_users AS u ON m.marshrut_by_user = u.user_id
LEFT JOIN phpbb3_meeting_falbum AS f ON m.meeting_id = f.meeting_id
LEFT JOIN phpbb3_marshrut_foto AS mf ON m.marshrut_id = mf.marshrut_id
LEFT JOIN phpbb3_marshrut_gpslink AS gp ON m.marshrut_id = gp.marshrut_id
LEFT JOIN phpbb3_meeting_fvideo AS v ON m.meeting_id = v.meeting_id
LEFT JOIN phpbb3_meeting_blog AS b ON b.meeting_id = m.meeting_id
LEFT JOIN phpbb3_meeting_data AS me ON m.marshrut_id = me.meeting_marshrut
WHERE m.marshrut_id <>0
GROUP BY m.marshrut_id
ORDER BY marshrut_time DESC LIMIT 10, 10


по EXPLAIN вижу что не используются ключи, но честно скажу не очень понимаю как быть с ними, подскажите, пожалуйста. Заранее извиняюсь за Нубство.

Отредактированно velo (29.01.2011 15:36:51)


Прикрепленные файлы:
Attachment Icon explainSQL.jpg, Размер: 51,602 байт, Скачано: 456

Неактивен

 

#2 29.01.2011 23:43:24

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите с ключами для оптимизации JOIN

POSSIBLE KEYS пустые. Индексы есть вообще на вспомогательных таблицах?

Неактивен

 

#3 29.01.2011 23:58:16

velo
Участник
Зарегистрирован: 05.04.2009
Сообщений: 2

Re: Помогите с ключами для оптимизации JOIN

Индексы только PRIMARY на основных полях (Id).
Cейчас добавил ещё индексы к полям, которые участвуют в этом запросе, результат хороший, но всё равно запрос длится примерно 0,1 сек. Другие запросы не превышают сотые доли секунды и меньше.
БД находится на том же сервере.

КАк ещё можно оптимизировать запрос?
Выделять их отдельно нет наверно смысла - получится на каждый основной в цикле = 10 (по данному LIMIT)
придётся проводить ещё 7 запросов, т.е. вместо LEFT JOIN получится 70 доп.запросов.  Это не есть хорошо, хотя суммарон они конечно и выиграют по времени, но ведь каждый ещё придётся обработать в PHP

В общем... весь в раздумьях, больно уж большое время 0,1c

PS запросы конечно кэшируются, но кэш не безграничен и через некоторое время очищается.

Неактивен

 

#4 30.01.2011 01:04:10

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите с ключами для оптимизации JOIN

Сколько ж запросов в секунду у Вас таких? smile

EXPLAIN покажите?

Неактивен

 

Board footer

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