Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] SELECT, INNER JOIN i wydajność, Różnice
eai
post 24.06.2009, 19:12:26
Post #1





Grupa: Zarejestrowani
Postów: 367
Pomógł: 10
Dołączył: 20.05.2005

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


Witam.

Mamy dwie tabele. W jednej przechowywuje użytkowników w drugiej wiadomości. Pobranie tematów wiadomości wraz z loginami osób mogę zrobić na dwa sposoby:

  1. SELECT m.title, u.login FROM mailbox AS m, users AS u WHERE m.users_id = u.id


  1. SELECT m.title, u.login FROM mailbox AS m INNER JOIN users AS u ON (m.users_id = u.id)


Oba zapytania zwrócą ten sam wynik. Które z tych zapytań jest bardziej wydajne i mniej obciąża bazę danych.
Używam osobiście framework Zend Framework, i korzystam z Zend_Db_Select. Korzystając z tego obiektu stworzenie pierwszego zapytania SQL nie jest możliwe. Może producenci ZF mieli w tym jakiś cel? Bardzo proszę o wyjaśnienie mi różnic tych dwóch zapytań.
Go to the top of the page
+Quote Post
erix
post 24.06.2009, 20:05:32
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A znasz
  1. EXPLAIN
? snitch.gif


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
eai
post 24.06.2009, 21:28:35
Post #3





Grupa: Zarejestrowani
Postów: 367
Pomógł: 10
Dołączył: 20.05.2005

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


  1. SELECT m.title, u.login FROM mailbox AS m, users AS u WHERE m.users_id = u.id

Kod
+------------------------------------------+--------+
| title                                    | login  |
+------------------------------------------+--------+
| dodał Cię do swojej listy przyjaciół     | admin  |
| dodał Cię do swojej listy przyjaciół     | hubert |
| dodał Cię do swojej listy przyjaciół     | bombel |
| dodał Cię do swojej listy przyjaciół     | hubert |
| dodał Cię do swojej listy przyjaciół     | hubert |
| dodał Cię do swojej listy przyjaciół     | ziomal |
+------------------------------------------+--------+
6 rows in set (0,00 sec)

  1. EXPLAIN (SELECT m.title, u.login FROM mailbox AS m, users AS u WHERE m.users_id = u.id)

Kod
+----+-------------+-------+--------+---------------+---------+---------+-------------------------+------+-------+
| id | select_type | table | type   | possible_keys | key     | key_len | ref                     | rows | Extra |
+----+-------------+-------+--------+---------------+---------+---------+-------------------------+------+-------+
|  1 | SIMPLE      | m     | ALL    | NULL          | NULL    | NULL    | NULL                    |   13 |       |
|  1 | SIMPLE      | u     | eq_ref | PRIMARY       | PRIMARY | 4       | 12ga-hotnite.m.users_id |    1 |       |
+----+-------------+-------+--------+---------------+---------+---------+-------------------------+------+-------+
2 rows in set (0,00 sec)


  1. SELECT m.title, u.login FROM mailbox AS m INNER JOIN users AS u ON (m.users_id = u.id)

Kod
+------------------------------------------+--------+
| title                                    | login  |
+------------------------------------------+--------+
| dodał Cię do swojej listy przyjaciół     | admin  |
| dodał Cię do swojej listy przyjaciół     | hubert |
| dodał Cię do swojej listy przyjaciół     | bombel |
| dodał Cię do swojej listy przyjaciół     | hubert |
| dodał Cię do swojej listy przyjaciół     | hubert |
| dodał Cię do swojej listy przyjaciół     | ziomal |
+------------------------------------------+--------+
6 rows in set (0,00 sec)

  1. EXPLAIN (SELECT m.title, u.login FROM mailbox AS m INNER JOIN users AS u ON (m.users_id = u.id))

Kod
+----+-------------+-------+--------+---------------+---------+---------+-------------------------+------+-------+
| id | select_type | table | type   | possible_keys | key     | key_len | ref                     | rows | Extra |
+----+-------------+-------+--------+---------------+---------+---------+-------------------------+------+-------+
|  1 | SIMPLE      | m     | ALL    | NULL          | NULL    | NULL    | NULL                    |   13 |       |
|  1 | SIMPLE      | u     | eq_ref | PRIMARY       | PRIMARY | 4       | 12ga-hotnite.m.users_id |    1 |       |
+----+-------------+-------+--------+---------------+---------+---------+-------------------------+------+-------+
2 rows in set (0,00 sec)


No i nadal nie widzę różnicy smile.gif
Go to the top of the page
+Quote Post
blooregard
post 24.06.2009, 21:38:48
Post #4


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




A weź sobie to zapętl ileś tam tysięcy razy i zobacz, która wersja wykona się szybciej.


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
maly_swd
post 24.06.2009, 21:45:30
Post #5





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


a czy to przez przypadek nie jest to samo;D


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
erix
post 24.06.2009, 21:59:12
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Jest w dokumentacji napisane, że where tabela1.pole1=tabela2.pole1 to po prostu JOIN. [;


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
calebos
post 25.06.2009, 08:22:27
Post #7





Grupa: Zarejestrowani
Postów: 104
Pomógł: 3
Dołączył: 22.02.2008

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


Cytat(eai @ 24.06.2009, 20:12:26 ) *
Korzystając z tego obiektu stworzenie pierwszego zapytania SQL nie jest możliwe. Może producenci ZF mieli w tym jakiś cel? Bardzo proszę o wyjaśnienie mi różnic tych dwóch zapytań.


Oba zapytania sa tak naprawde takie same. Prawdopodobnie Framework chce na Tobie wymusic pisanie JOIN'ow wedlug standardu. Robi sie po to ze jak jest ich juz sporo w jakiejs aplikacji to wtedy zacznie Cie irytowac odszukiwanie zlaczen tam gdzie warunki
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 25.06.2025 - 13:41