|
 18.1 Кб |
|
| Здравствуйте, оцените, пожалуйста запрос на производительность
SELECT DISTINCT firma.name as fname ,firma.znak as znak,firma.x as x,firma.y as y,firma.id as fid,firma.adress,firma.email,firma.url,firma.home,firma.telefon
FROM firma
LEFT JOIN tovar ON tovar.id_firm=firma.id
LEFT JOIN rubrik_tovar ON rubrik_tovar.id_tovar=tovar.id
INNER JOIN
(SELECT g1.id FROM grtovar_new g1
INNER JOIN grtovar_new g2 on g1.id=g2.id
WHERE g2.id_parent=19)
t0 ON t0.id=rubrik_tovar.id_rubrik
WHERE firma.registr=1
ORDER by fname asc
limit 0, 30
|
В прикрепленном файле EXPLAIN запроса | |
|
|
|
|
|
|
|
для: Импекс
(26.07.2010 в 10:13)
| |
SELECT g1.id FROM grtovar_new g1
INNER JOIN grtovar_new g2 on g1.id=g2.id
WHERE g2.id_parent=1
| INNER JOIN тут зачем нужен?
SELECT g1.id FROM grtovar_new g1
WHERE g1.id_parent=1 AND g1.id IS NOT NULL
|
Весь этот подзапрос можно заменить обычным внутренним присоединением таблицы grtovar_new с вынесением условия во внешний запрос, тогда из плана должна уйти derived table.
Оба LEFT JOIN не имеют смысла, когда на крайнюю присоединённую таблицу присоединяют ещё одну таблицу с помощью INNER JOIN по обычному оператору равенства, выборка в этом случае должна получиться такой же, как если бы везде был INNER JOIN.
Кейворд DISTINCT с таким внушительным перечислением наводит на мысли, что тут что то совсем не так.
По explain'у: temporary table, filesort - от всего этого желательно по мере возможности избавляться. | |
|
|
|
|
|
|
|
для: sms-send
(26.07.2010 в 12:38)
| | Вы верно заметили про distinct. Из за него и происходят временные таблицы. В следующем запросе их уже нет, но выводятся дублирующие записи таблицы firm
SELECT
f.name AS fname,
f.znak AS znak,
f.id AS fid,
f.adress,
f.email,
f.url,
f.home,
f.telefon
FROM
firma AS f
LEFT JOIN tovar AS t
ON t.id_firm = f.id
LEFT JOIN rubrik_tovar AS r
ON r.id_tovar = t.id
right JOIN grtovar_new AS g
ON g.id = r.id_rubrik
AND g.id_parent = '19'
WHERE
f.registr = 1
LIMIT
0, 30;
|
например :
фирма 1
фирма 1
фирма 1
фирма 2
фирма 2
фирма 3
как мне исправиться последний запрос | |
|
|
|