![]() |
![]() |
![]()
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:
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ł? -------------------- |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Nie ma się co dziwić, że zapytanie działa tak długo, ponieważ sprawdza setki kombinacji, zanim trafi na odpowiedni zbiór pogrupowanych miejscowości. Jest po prostu trochę źle napisane:
Nie wiem czemu ma służyć sortowanie, ale dopisać nie będzie trudno. Grupujemy i łączymy tylko te rekordy, których M.ID_transport jest zgodne z T.ID_t. PS1: Usunąłem część odpowiedzi, bo brzmiała dwuznacznie, tzn. można ją było dwuznacznie zrozumieć. PS2: Teraz tak patrzę i widzę, że różnica jest niewielka. Zastanawiam się tylko, po co Ci DISTINCT w podzapytaniu i dlaczego te tabele są połączone relacją jeden do wielu. Wydawać by się mogło, że do tego potrzebne są trzy tabele i relacja wiele do wielu, ale to zależy od założeń aplikacji. Ten post edytował mortus 2.04.2013, 20:33:48 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 05:41 |