Проблема с производительность работы VIEW

Trike

Новичок
Проблема с производительность работы VIEW

Доброго времени суток.

В проекте активно используются представления. С недавнего времени на небольшой таблице появились тормоза (6-7 секунд на запрос).
EXPLAIN показал такие интересные результаты:

EXPLAIN SELECT *
FROM `view`

1 PRIMARY <derived2> ALL NULL NULL NULL NULL 5076
2 DERIVED l ALL NULL NULL NULL NULL 5079 Using temporary; Using filesort
2 DERIVED t eq_ref PRIMARY PRIMARY 4 ozd.l.id_ed_izm 1
2 DERIVED r eq_ref PRIMARY PRIMARY 4 ozd.l.id_class 1

Исходный запрос же в этом случае работает 0.001 cекунды и выглядит так:

EXPLAIN SELECT *
FROM lap AS l
LEFT JOIN types AS t ON l.id_ed = t.id
LEFT JOIN razd AS r ON l.id_class = r.id
GROUP BY l.id

1 SIMPLE l ALL NULL NULL NULL NULL 5079 Using temporary; Using filesort
1 SIMPLE t eq_ref PRIMARY PRIMARY 4 ozd.l.id_ed_izm 1
1 SIMPLE r eq_ref PRIMARY PRIMARY 4 ozd.l.id_class 1

То есть VIEW подключает одну таблицу 2 раза полностью.
Погуглив, узнал, что подобная проблема проявляется только при использовании GROUP BY .
После проверки, собственно, это и подтвердилось.

Вопрос, есть ли какой-нибудь способ обойти этот баг с GROUP BY или проще переписать скрипт без использования VIEW ?
 

fixxxer

К.О.
Партнер клуба
В мыскле вьюхи вообще долбанутые. Например force index/straight_join при создании view прекрасно принимаются, но фактически игнорируются :)

Я с ними разок намучался и решил что ну их.
 

Splurov

Новичок
А если в исходном запросе написать SELECT SQL_NO_CACHE тоже 0,001 секунды будет?
 

Trike

Новичок
Автор оригинала: Splurov
А если в исходном запросе написать SELECT SQL_NO_CACHE тоже 0,001 секунды будет?
да, 5900 строк вытаскивается без проблем.

Видимо придется переписать те запросы, в которых проявляются проблемы.
 

iceman

говнокодер
а защем используешь GROUP BY l.id в такой конструкции, если ИД уникален толку от него о_О
 

dimagolov

Новичок
iceman, а если там джойнится несколько строк? будет он очень даже не уникальным
 

iceman

говнокодер
интересно как унего выборка произойдет о_О,
ната мускул поставить - я в голове даж так сгруппировать не могу...
 

Trike

Новичок
я обрезал запрос, он намного больше.
группировалось вот для этого:
GROUP_CONCAT(CONCAT (' ',u2.id_org))
 

Trike

Новичок
именно в такой форме осталось опять же после сокращения. там более одной колонки собирается.
да и на суть вопроса добавление CONCAT не влияет.
 
Сверху