Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Оптимизация запроса не несколькими JOIN LEFT (SpaceIQ) 05/10/2010 - 23:20:23
      Re: Оптимизация запроса не несколькими JOIN LEFT (SpaceIQ) 06/10/2010 - 00:21:56
      Re: Оптимизация запроса не несколькими JOIN LEFT (Diter) 06/10/2010 - 01:40:38

> Original message text:
> From: SpaceIQ - 05/10/2010 - 23:20:23
> Subject:Оптимизация запроса не несколькими JOIN LEFT
> -----------------
> Добрый вечер, господа!
>
> Помогите, пожалуйста, с оптимизацией запроса.
>
> Мне кажется это довольно простой запрос, но выполняется подозрительно долго (около 4-5 секунд).
>
> В таблице tableA порядка 100 000 записей.
> В таблице tableB поярдка 250 000 записей (tableA -> tableB - один ко многим).
> В таблице tableС порядка 50 записей (tableB -> tableC - один ко дному, словарь).
> В таблице tableD порядка 2 000 000 записей (tableB -> tableD, один ко многим).
>
> Тип таблиц InnoDB
>
>
> SELECT
> *
> FROM
> (
> SELECT * FROM tableA LIMIT 100
> ) AS a
> LEFT JOIN tableB AS b ON b.a_id = a.a_id
> LEFT JOIN tableC AS c ON c.c_id = b.c_id
> LEFT JOIN tableD AS d ON d.b_id = b.b_id
>
>
>
> Информация EXPLAIN SELECT такая:
>
> id: 1
> select_type: PRIMARY
> table: <derived2>
> type: ALL
> possible_key: (null)
> key: (null)
> key_len: (null)
> ref: (null)
> rows: 100
> extra: пусто
>
> id: 1
> select_type: PRIMARY
> table: tableB
> type: ref
> possible_key: FK_tableB_tableA_a_id
> key: FK_tableB_tableA_a_id
> key_len: 5
> ref: a.a_id
> rows: 1
> extra: пусто
>
> id: 1
> select_type: PRIMARY
> table: tableC
> type: eq_ref
> possible_key: PRIMARY, UK_tableC_c_id
> key: PRIMARY
> key_len: 1
> ref: b.c_id
> rows: 1
> extra: пусто
>
> id: 1
> select_type: PRIMARY
> table: tableD
> type: ref
> possible_key: FK_tableD_tableB_b_id
> key: FK_tableD_tableB_b_id
> key_len: 9
> ref: b.b_id
> rows: 3
> extra: using index
>
> id: 2
> select_type: PRIMARY
> table: tableA
> type: ALL
> possible_key: (null)
> key: (null)
> key_len: (null)
> ref: (null)
> rows: 119543
> extra: пусто
>
> Меня смущает последняя запись с id = 2 и rows = 119543. Это так и должно быть?
>
> А задача такая:
> Для 100 первых записей (tableA) загрузить информацию из всех остальных таблиц.
>


From: SpaceIQ - 06/10/2010 - 00:21:56
Subject:Оптимизация запроса не несколькими JOIN LEFT
-----------------
Небольшое изменение:

SELECT
*
FROM
(
SELECT * FROM tableA ORDER BY a_id LIMIT 100
) AS a
LEFT JOIN tableB AS b ON b.a_id = a.a_id
LEFT JOIN tableC AS c ON c.c_id = b.c_id
LEFT JOIN tableD AS d ON d.b_id = b.b_id


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
37552



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |