Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie do 7 tabel na innoDB wykonuje się 20 sekund (!)
Forum PHP.pl > Forum > Bazy danych > MySQL
L_Devil
Witam. Mam dwie tabele:

Kod
common_parametrs:
+-----+----------+-------------+
| Id  |   name   |    value    |
+-----+----------+-------------+


Kod
user_posters:
+-----+----------+---------
| Id  |   login  |   ...  
+-----+----------+---------


Obie tabele jako InnoDB

  1. SELECT
  2. p.id AS id,
  3. c1.value AS name,
  4. p.login AS login,
  5. c2.value AS version,
  6. c3.value AS pragma,
  7. c4.value AS DATA,
  8. c5.value AS author,
  9. c6.value AS copyrights
  10. FROM common_parametrs AS c1,
  11. users_posters AS p,
  12. common_parametrs AS c2,
  13. common_parametrs AS c3,
  14. common_parametrs AS c4,
  15. common_parametrs AS c5,
  16. common_parametrs AS c6
  17. WHERE c1.name='name' AND c1.owner=p.id AND c2.name='version' AND c2.owner=p.id AND c3.name='pragma' AND c3.owner=c2.owner AND c4.name='data' AND c4.owner=c3.owner AND c5.name='author' AND c5.owner=c4.owner AND c6.name='copyrights' AND c6.owner=c5.owner
  18. ORDER BY c1.value ASC;

Wykonanie tego zapytania trwa dosłownie wieki... dla 96 rekordów do pobrania

Jak temu zaradzić?
dr_bonzo
Bo laczysz te wszystkie tabele ze soba (ukrytymi JOINami)

Nie mozesz po prostu wyciagnac par nazwa,wartosc dla wszystkich parametrow danego usera i zJOINowac to z userem?
L_Devil
Czyli? Jak to napisać?
dr_bonzo
Normalnie smile.gif Pobierasz wszystkie atrybuty z tym samym id

  1. SELECT up.id, up.name, cp.name, cp.value
  2. FROM common_parametrs cp
  3. JOIN user_posters up
  4. ON up.id = cp.owner
  5. WHERE cp.owner = $jakies_id
SongoQ
@dr_bonzo Co to jest ukryty join?
dr_bonzo
eh smile.gif
Chodzilo mi o to ze piszac
WHERE + warunki dotyczace kilku tabel
t.id == t2.id itd
po prostu laczymy te tabele bez wpisysywania slowa JOIN
SongoQ
Przeciez to to samo. Coraz czesciej stosuje sie taka skladnie i to jest tylko dobry nawyk ale czy przez where czy przez join sprowadza sie do tego samego. W Oracle jeszce jest skladnia where a.pole = b.pole (+)
L_Devil
Cytat(dr_bonzo @ 1.06.2007, 00:08:23 ) *
Normalnie smile.gif Pobierasz wszystkie atrybuty z tym samym id
Myślałem, że jest sprytniejszy sposób, stąd moje niezrozumienie winksmiley.jpg

Problem w tym, że tych userów może być kilka tysięcy, na każdego przypadające po ok. 100 parametrów... Czy jest sens pobierać wszystkie?
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.