Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Prośba o zrobienie JOIN
Forum PHP.pl > Forum > Bazy danych > MySQL
inwob
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!
Fifi209
A masz indexy na interesujących Cię kolumnach?
wookieb
Pokaz wynik
  1. SHOW CREATE TABLE `players`

oraz
  1. SHOW CREATE TABLE `guilds`

inwob


@edit
Niby zrobiłem ale nadal jest długi czas wykonania 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?
prachwal
  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;
inwob
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)
prachwal
tabela players, pole rank_id - założyć indeks
inwob
Z 4 sekund zrobiło się .... 0.2 sekund!
Dziękuje bardzo 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!
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.