Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zapytanie
Forum PHP.pl > Forum > Bazy danych > MySQL
elj
Witam
Mam problem z wydajnością bazy. Szczególnie jeżeli chodzi o spinanie np 4 tablic.

  1. SELECT zm.GR_ID, st.P_TYP, zm.P_NR_FAB, us.U_NAZWA_S, om.OM_NAZWA_S
  2. FROM (przyrzad_zm AS zm), (przyrzad_st AS st),(uzytkownik AS us), (osrodek_met AS om)
  3. WHERE (zm.GR_ID)=(st.GR_ID) AND (zm.U_ID)=(us.U_ID) AND (us.OM_ID)=(om.OM_ID) AND zm.OM_ID != 9111497 AND zm.OM_ID = us.OM_ID
  4. ORDER BY (us.OM_ID) ASC LIMIT 0, 1000

Czy nie powstawiałem za dużo warunków? To mi trwa 7 min, a jak dam limit na 100 to też mam 7 min.
Serwer to P4 3Ghz 256MB RAM Debian.
pozdr. elj
orson
witam ...

zmień zapytanie na LEFT JOIN ... o wiele łatwiej się czyta ... daj wynik explain ... sprawdź czy masz klucze ... czy łączysz po kluczach ...

pozdrawiam
edit:
try this:
  1. SELECT
  2. zm.GR_ID, st.P_TYP, zm.P_NR_FAB, us.U_NAZWA_S, om.OM_NAZWA_S
  3. FROM `przyrzad_zm` AS zm
  4. LEFT JOIN `przyrzad_st` AS st ON (zm.GR_ID = st.GR_ID AND zm.OM_ID != 9111497)
  5. LEFT JOIN `uzytkownik` AS us ON (us.U_ID = zm.U_ID AND us.OM_ID = zm.OM_ID)
  6. LEFT JOIN `osrodek_met` AS om ON us.OM_ID = om.OM_ID
  7. ORDER BY us.OM_ID ASC LIMIT 1000 OFFSET 0;
TomASS
Mnie się wcale nie czyta łatwiej jako LEFT JOIN tongue.gif

Poczytaj MySQL Optimization, a szczególnie rozdział "EXPLAIN Syntax (Get Information About a SELECT)".
Shogo
A ze sie tak niesmiale zapytam...
Myslales moze o zalozeniu indeksow na polach po ktorych laczysz. To powinno znacznie przyspieszyc joina winksmiley.jpg Sprawdz, powinno pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.