Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zapytanie do 7 tabel na innoDB wykonuje się 20 sekund (!), Co robię nie tak?
L_Devil
post
Post #1





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


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ć?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


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?
Go to the top of the page
+Quote Post
L_Devil
post
Post #3





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


Czyli? Jak to napisać?
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Normalnie (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
SongoQ
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


@dr_bonzo Co to jest ukryty join?
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


eh (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
SongoQ
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


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 (+)
Go to the top of the page
+Quote Post
L_Devil
post
Post #8





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


Cytat(dr_bonzo @ 1.06.2007, 00:08:23 ) *
Normalnie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Pobierasz wszystkie atrybuty z tym samym id
Myślałem, że jest sprytniejszy sposób, stąd moje niezrozumienie (IMG:http://forum.php.pl/style_emoticons/default/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?
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 01:02