/ / MySQL: Zliczanie elementów w wielu połączonych tabelach - mysql, optymalizacja zapytań

MySQL: Zliczanie elementów w wielu połączonych tabelach - mysql, optymalizacja zapytań

Mam tabelę „Wydarzenia” i kilka wspólnych tabel w następujący sposób:

Wydarzenia + tagi + obrazy + filmy

Chciałbym móc utworzyć zapytanie, w którym mogę policzyć elementy we wspólnych tabelach, jeśli takie są. Mam więc coś takiego:

 SELECT t.*, COUNT(distinct t1.id) visible_tags, COUNT(distinct t2.id)
invisible_tags, ..., COUNT(distince tn.id) approved_videos
FROM events t
LEFT JOIN tags t1 ON ...
LEFT JOIN tags t2 ON ...
LEFT JOIN tags t3 ON ...
...
LEFT JOIN videos tn ON ...

Problem polega na tym, że zapytanie nawet przy wszystkich indeksach zajmuje dość dużo czasu. Czy istnieje sposób, aby inaczej to sformułować?

Dzięki.

Odpowiedzi:

1 dla odpowiedzi № 1

Wraz z tym, co @sanmai powiedział o „Wyjaśnij wybór”, możesz również dołączyć do podzapytań.

SELECT t.*, t1_count, t2_count
FROM events t
LEFT JOIN (select count(distinct id) as t1_count from tags) as t1
LEFT JOIN (select count(distinct id) as t2_count from tags) as t2
...

1 dla odpowiedzi nr 2

Jeśli zapytanie zajmuje dużo czasu, istnieje prawdopodobieństwo, że problem nie występuje w zapytaniu.

Jakie indeksy są używane w tym zapytaniu? Pokaż użycie EXPLAIN SELECT ...