![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 743 Pomógł: 0 Dołączył: 11.11.2003 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Witam serdecznie,
Ostatnio zadziwiło mnie coś w moim zapytaniu. Mianowicie po przestawieniu 2 słów, czas zapytania spadł z 11s do 0.5s
A dokładniej chodzi o ten kawałek
Gdy zamienię objects LEFT JOIN objstates na objstates LEFT JOIN objects zapytanie zyskuje tyle czasu. I teraz moje pytanko Skąd mam wiedzieć do których tabel odwoływać się najpierw ? Czytałem że LEFT JOIN na dużych tabelach spowalnia bardzo co można stosować w zamian ? Wielkie dziękki za pomoc ! (IMG:http://forum.php.pl/style_emoticons/default/angrysmiley.gif) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 15.09.2005 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
To oczywiste: tabela z lewej strony jest tabelą chronioną, tzn. dla każdego rekordu należącego do tej tabeli i spełniającego kryteria wyszukiwania wykonywany jest non-equi-join (w tym wypadku left join). Jeśli zatem tabela chroniona jest duża, to i wykonanie złączenia trwa długo. Jeśli jest mała, to wykonanie złączenia trwa odpowiednio krócej. Wniosek: po lewej stronie złączenia powinna byc tabela z jak najmniejszą liczba rekordów.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 743 Pomógł: 0 Dołączył: 11.11.2003 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
A czy mozna coś stosować zamiast LEFT JOIN ?
Niektórzy piszą tak
Czym to się różni od:
(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 15.09.2005 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Oj kochany, nie masz podstaw. Poczytaj sobie manual MySQLa. W skrócie: LEFT JOIN złącza wszystkie rekordy z tabeli po lewej stronie z odpowiadającymi im rekordami z tabeli po prawej stronie, a jak nie ma rekordu, który odpowiadałby, zwraca NULL, a złączenie i tak się dokonuje. Użycie WHERE tabela1.id=tabela2.id dokonuje złaczenia tylko pasujących rekordów.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 20:40 |