Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Prośba o zrobienie JOIN
inwob
post
Post #1





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 2.05.2010

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


Witam!
Z racji że na chwile obecną nie ogarniam JOIN w mysql mam do Was prośbę.
Czy moglibyście przerobić ten kod aby jak najmniej trwało jego wykonanie?
Bo póki co muszę czekać ok 5 sekund aż go wykona.
  1. SELECT COUNT(`level`) AS `ile`,`guilds`.`id` AS `id` FROM `players`,`guilds` WHERE `players`.`rank_id` IN (SELECT `id` FROM `guild_ranks` WHERE `guild_id` = `guilds`.`id`) GROUP BY guilds.id

i
  1. SELECT AVG(`level`) AS `lvl`,`guilds`.`id` AS `id` FROM `players`,`guilds` WHERE `players`.`rank_id` IN (SELECT `id` FROM `guild_ranks` WHERE `guild_id` = `guilds`.`id`) GROUP BY guilds.id

Z góry dziękuje i Pozdrawiam!
Go to the top of the page
+Quote Post
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


A masz indexy na interesujących Cię kolumnach?
Go to the top of the page
+Quote Post
wookieb
post
Post #3





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Pokaz wynik
  1. SHOW CREATE TABLE `players`

oraz
  1. SHOW CREATE TABLE `guilds`

Go to the top of the page
+Quote Post
inwob
post
Post #4





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 2.05.2010

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




@edit
Niby zrobiłem ale nadal jest długi czas wykonania (IMG:style_emoticons/default/sad.gif)
  1. SELECT g.name,count(p.id) FROM guilds g
  2. LEFT JOIN guild_ranks gr
  3. ON g.id = gr.guild_id
  4. LEFT JOIN players p
  5. ON p.rank_id = gr.id
  6. GROUP BY g.id;


Jakieś pomysły?

Ten post edytował inwob 5.03.2011, 14:59:31
Go to the top of the page
+Quote Post
prachwal
post
Post #5





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 13.03.2009
Skąd: lublin

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


  1. EXPLAIN SELECT g.name,count(p.id) FROM guilds g
  2. LEFT JOIN guild_ranks gr
  3. ON g.id = gr.guild_id
  4. LEFT JOIN players p
  5. ON p.rank_id = gr.id
  6. GROUP BY g.id;
Go to the top of the page
+Quote Post
inwob
post
Post #6





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 2.05.2010

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


Kod
+----+-------------+-------+-------+---------------+----------+---------+-------------+-------+----------------------------------------------+
| id | select_type | table | type  | possible_keys | key      | key_len | ref         | rows  | Extra                                        |
+----+-------------+-------+-------+---------------+----------+---------+-------------+-------+----------------------------------------------+
|  1 | SIMPLE      | g     | index | NULL          | name     | 258     | NULL        |   275 | Using index; Using temporary; Using filesort |
|  1 | SIMPLE      | gr    | ref   | guild_id      | guild_id | 4       | narvia.g.id |     1 | Using index                                  |
|  1 | SIMPLE      | p     | ALL   | NULL          | NULL     | NULL    | NULL        | 11165 |                                              |
+----+-------------+-------+-------+---------------+----------+---------+-------------+-------+----------------------------------------------+
3 rows in set (0.00 sec)
Go to the top of the page
+Quote Post
prachwal
post
Post #7





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 13.03.2009
Skąd: lublin

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


tabela players, pole rank_id - założyć indeks
Go to the top of the page
+Quote Post
inwob
post
Post #8





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 2.05.2010

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


Z 4 sekund zrobiło się .... 0.2 sekund!
Dziękuje bardzo (IMG:style_emoticons/default/smile.gif)
A co zrobić żeby taki wynik jak najdłużej utrzymać?

Kod
+----+-------------+-------+-------+---------------+----------+---------+--------------+------+-------------+
| id | select_type | table | type  | possible_keys | key      | key_len | ref          | rows | Extra       |
+----+-------------+-------+-------+---------------+----------+---------+--------------+------+-------------+
|  1 | SIMPLE      | g     | index | NULL          | name     | 258     | NULL         |  154 | Using index |
|  1 | SIMPLE      | gr    | ref   | guild_id      | guild_id | 4       | narvia.g.id  |    1 | Using index |
|  1 | SIMPLE      | p     | ref   | rank_id       | rank_id  | 4       | narvia.gr.id |   11 | Using index |
+----+-------------+-------+-------+---------------+----------+---------+--------------+------+-------------+


Pozdrawiam!
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: 22.08.2025 - 19:50