У меня есть этот запрос:Очень, очень медленный запрос
SELECT
a.id,
a.name,
count(b.id),
count(c.id),
count(e.id),
count(f.id)
FROM
organizations a
LEFT JOIN vessels b ON a.id = b.organization_id
LEFT JOIN licences c ON a.id = c.organization_id
LEFT JOIN fleets e ON a.id = e.organization_id
LEFT JOIN users f ON a.id = f.organization_id
GROUP BY a.id;
Во всех таблицах есть правильный индекс (на первичном индексе, и organization_id
), есть около 80 строк в organizations
, 400 в fleets
, 2900 в vessels
, 3000 в licences
и 10 в users
Этот запрос даже не удастся, он застрял на copying to temp table
Как мне переделать этот запрос, чтобы он работал (быстро)?
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE a index PRIMARY 4 1
1 SIMPLE b ref organisation_id organisation_id 4 fuel.a.id 70 Using index
1 SIMPLE c ref organisation_id organisation_id 4 fuel.a.id 15 Using index
1 SIMPLE e ref organisation_id organisation_id 4 fuel.a.id 5
1 SIMPLE f ref organization_id organization_id 5 fuel.a.id 1 Using index
Что делает [ 'EXPLAIN'] (HTTP: // dev.mysql.com/doc/refman/5.0/en/explain.html) скажите? – h2ooooooo
Сначала вы можете использовать объяснение, чтобы проверить, что делает это медленным, во-вторых, вы делаете много объединений, третий смотрите на индексы, которые у вас есть, или вы должны их создать. –
является 'organization_id' NULLABLE? – Chris