Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Podkręcanie GROUP_CONCAT
TomASS
post
Post #1





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


Witam serdecznie.

Mam w bazie danych realację jeden do wielu. Mam tabelę transporty oraz miejsca. Do jednego transportu może być przypisanych kilka miejsc.

Aby całość trasy (wszystkie miejsca danego transportu) wyciąnąć w zapytaniu daję GROUP CONCAT:

  1. SELECT T.*, (SELECT GROUP_CONCAT(DISTINCT M.Miejscowosc ORDER BY Rodzaj DESC SEPARATOR '-') FROM m_miejsca AS M WHERE M.ID_transport=T.ID_t AND M.Miejsce!='del') FROM m_transporty AS T;


Niestety daje mi to czas 8 sekund dla 100 rekordow. Po usunieciu GROUP_CONCAT daje mi czas 0,03s.
Co próbowałem:
1. Uproszczenie GROUP_CONCAT: (SELECT GROUP_CONCAT(M.Miejscowosc SEPARATOR '-') FROM m_miejsca AS M WHERE M.ID_transport=T.ID_t ) - nic nie daje (minimalne przyspieszenie - 1,5%)
2. Przeniesienie funkcjonalności do "STORED FUNCTION" - także nic


Czy ktoś ma jakiś pomysł?


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
TomASS
post
Post #2





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


EXPLAIN pokazuje:
Cytat
id = 2
select_type = DEPENDENT SUBQUERY
table = M
type = ALL
possible_keys = ID_transport,ID_transport_2
key = NULL
key_len = NULL
ref = NULL
rows = 28735
Extra = Using where


Podzapytanie:
  1. (SELECT GROUP_CONCAT(DISTINCT M.Miejscowosc ORDER BY Rodzaj DESC SEPARATOR '-') FROM m_miejsca AS M WHERE M.ID_transport=T.ID_t AND M.Miejsce!='del')


Indeksy dla tabeli m_miejsca:
Pierwszy: ID_transport
Drugi: ID_transport + Miejsce

sad.gif


--------------------
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 08:48