Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
LEFT JOIN одной записи
|
|||
|---|---|---|---|
|
#18+
Существует 2 таблицы. table: groups group_id | name -------------------- 1 | text 2 | text 3 | text 4 | text 5 | text table: items item_id | group_id ------------------ 1 | 1 2 | 1 3 | 1 4 | 2 5 | 2 Нужно вынуть все записи из groups и к каждой записи присоединить одну запись из items (первую либо любую запись) В принципе это можно сделать так: SELECT * FROM groups g LEFT JOIN (SELECT * FROM items group by group_id) i ON(g.group_id=i.group_id) Тут запрос "SELECT * FROM items group by group_id" является тяжёлым. Есть какое то другое решение ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2011, 12:12 |
|
||
|
LEFT JOIN одной записи
|
|||
|---|---|---|---|
|
#18+
любую Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2011, 12:20 |
|
||
|
LEFT JOIN одной записи
|
|||
|---|---|---|---|
|
#18+
если из items нужно вернуть только одно поле, то так будет быстрее Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2011, 12:21 |
|
||
|
LEFT JOIN одной записи
|
|||
|---|---|---|---|
|
#18+
Alex_Ustinovлюбую Код: plaintext 1. 2. 3. 4. 5. 6. 7. Этот запрос требует тех же ресурсов что и мой запрос. Я ищу альтернативу, изначально не присоединять лишние записи. Очень странно что в mysql не реализовано какова то боле легкого решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2011, 15:09 |
|
||
|
LEFT JOIN одной записи
|
|||
|---|---|---|---|
|
#18+
>Этот запрос требует тех же ресурсов что и мой запрос. А давайте-ка explain-ы обоих запросов в студию. Иначе никто вам не поверит. >Я ищу альтернативу, изначально не присоединять лишние записи. С чего вы взяли, что что-то лишнее куда-то будет присоединяться? >Очень странно что в mysql не реализовано какова то боле легкого решения. Можете указать, где такое решение реализовано и как выглядит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2011, 15:26 |
|
||
|
LEFT JOIN одной записи
|
|||
|---|---|---|---|
|
#18+
tanglir>Очень странно что в mysql не реализовано какова то боле легкого решения. Можете указать, где такое решение реализовано и как выглядит?В Оракле, действительно, желаемое можно сделать аналитическими функциями, которых нет в MySQL. Правда, не факт, что там это потребует меньшего количества алгоритмических действий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2011, 15:45 |
|
||
|
LEFT JOIN одной записи
|
|||
|---|---|---|---|
|
#18+
qwerty112если из items нужно вернуть только одно поле, то так будет быстрее Код: plaintext 1. 2. 3. Интересный вариант. Надо будет протестировать его производительность. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2011, 15:46 |
|
||
|
LEFT JOIN одной записи
|
|||
|---|---|---|---|
|
#18+
tanglir... >Очень странно что в mysql не реализовано какова то боле легкого решения. Можете указать, где такое решение реализовано и как выглядит? в МС СКЛ - cross / outer apply ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2011, 16:57 |
|
||
|
LEFT JOIN одной записи
|
|||
|---|---|---|---|
|
#18+
И так результаты тестирования 3 перечисленных вариантов. 1) Код: plaintext 1. 2. id select_type table type possible_keys key key_len ref rows 1 PRIMARY u ALL (NULL) (NULL) (NULL) (NULL) 14 1 PRIMARY <derived2> ALL (NULL) (NULL) (NULL) (NULL) 16 2 DERIVED video_stats index (NULL) NewIndex4 5 (NULL) 1359239 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2011, 22:57 |
|
||
|
LEFT JOIN одной записи
|
|||
|---|---|---|---|
|
#18+
И так результаты тестирования 3 перечисленных вариантов. 1) Мой первый вариант. Код: plaintext 1. 2. id select_type table type possible_keys key key_len ref rows 1 PRIMARY u ALL (NULL) (NULL) (NULL) (NULL) 14 1 PRIMARY <derived2> ALL (NULL) (NULL) (NULL) (NULL) 16 2 DERIVED video_stats index (NULL) NewIndex4 5 (NULL) 1359239 Execution Time : 22766 ms Mysql проходит по всем записям таблицы video_stats, запрос тяжёлый. 2) Вариант предложенный Alex_Ustinov Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. id select_type table type possible_keys key key_len ref rows filtered Extra1 SIMPLE u ALL (NULL) (NULL) (NULL) (NULL) 14 100.00 Using temporary; Using filesort1 SIMPLE v ref NewIndex4 NewIndex4 5 test.u.member_id 75511 100.00 Execution Time :22610 ms Тут преимущество - mysql проходит только по 75511 записям. Минус - использования Temporary Table и Filesort Время выполнение взяло также много как и в первом варианте. 3) Вариант предложенный qwerty112 Код: plaintext 1. 2. 3. id select_type table type possible_keys key key_len ref rows filtered Extra1 PRIMARY u ALL (NULL) (NULL) (NULL) (NULL) 14 100.00 2 DEPENDENT SUBQUERY v ref NewIndex4 NewIndex4 5 test.u.member_id 75511 100.00 Using where Execution Time :328 ms Запрос завершился поразительно быстро (в 68 раз быстрее прошлых запросов) Третий вариант победитель ! :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2011, 23:28 |
|
||
|
LEFT JOIN одной записи
|
|||
|---|---|---|---|
|
#18+
ну и взгляните на всевозможные варианты FAQ: Выборка первой/последней записи в группах вы выбрали запрос С3 и не вовсех случаях он самый быстрый. Просмотрите Референсы, особенно вот здесь в конце. Все зависит от объема данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2011, 23:51 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=37258107&tid=1830708]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
| others: | 15ms |
| total: | 148ms |

| 0 / 0 |
