SQL dotaz trvá po aktualizaci pět minut

martyd420

  • ***
  • 217
  • K U B U N T U
    • Zobrazit profil
    • E-mail
SQL dotaz trvá po aktualizaci pět minut
« kdy: 23. 02. 2020, 12:22:49 »
Ahoj, přesouvám phpbb fórum z jednoho serveru na druhý.
Původní mysql je 5.5.62 a dotaz zde trvá 0.00 sec, na serveru kam to přesouvám je 5.7.28 a dotaz běží 5 minut.

Indexy jsem ručně kontroloval a na všech 5 tabulkách jsou nastavené stejně, přesto podle explain proběhnou dotazy jinak.
Podle toho explainu jsem koukal na ty indexy, ale nic jsem nenašel..  Nepoznáte někdo pls jaký problém hledat?  Díky :)

Sql dotaz:
Kód: [Vybrat]
SELECT ug.user_id, a.forum_id, r.auth_setting, r.auth_option_id, ao.auth_option                         
FROM phpbb3_acl_groups a, phpbb3_user_group ug, phpbb3_groups g, phpbb3_acl_roles_data r, phpbb3_acl_options ao
WHERE a.auth_role_id = r.role_id
AND r.auth_option_id = ao.auth_option_id                                 
AND a.group_id = ug.group_id                                 
AND g.group_id = ug.group_id                                 
AND ug.user_pending = 0                                 
AND NOT (ug.group_leader = 1 AND g.group_skip_auth = 1)                                 
AND ao.auth_option = 'm_';

EXPLAIN MySQL 5.5.62
Kód: [Vybrat]
+----+-------------+-------+--------+-----------------------+--------------+---------+---------------------+-------+----------+-------------+
| id | select_type | table | type   | possible_keys         | key          | key_len | ref                 | rows  | filtered | Extra       |
+----+-------------+-------+--------+-----------------------+--------------+---------+---------------------+-------+----------+-------------+
|  1 | SIMPLE      | ao    | const  | PRIMARY,auth_option   | auth_option  | 152     | const               |     1 |   100.00 |             |
|  1 | SIMPLE      | r     | ref    | PRIMARY,ath_op_id     | ath_op_id    | 3       | const               |     3 |   100.00 |             |
|  1 | SIMPLE      | a     | ref    | group_id,auth_role_id | auth_role_id | 3       | wareznet.r.role_id  |   260 |   100.00 |             |
|  1 | SIMPLE      | g     | eq_ref | PRIMARY               | PRIMARY      | 3       | wareznet.a.group_id |     1 |   100.00 |             |
|  1 | SIMPLE      | ug    | ref    | group_id,group_leader | group_id     | 3       | wareznet.a.group_id | 25034 |   100.00 | Using where |
+----+-------------+-------+--------+-----------------------+--------------+---------+---------------------+-------+----------+-------------+

EXPLAIN MySQL 5.7.28
Kód: [Vybrat]
+----+-------------+-------+------------+--------+-----------------------+-------------+---------+-------------------------------+-------+----------+-------------+
| id | select_type | table | partitions | type   | possible_keys         | key         | key_len | ref                           | rows  | filtered | Extra       |
+----+-------------+-------+------------+--------+-----------------------+-------------+---------+-------------------------------+-------+----------+-------------+
|  1 | SIMPLE      | ao    | NULL       | const  | PRIMARY,auth_option   | auth_option | 152     | const                         |     1 |   100.00 | NULL        |
|  1 | SIMPLE      | g     | NULL       | ALL    | PRIMARY               | NULL        | NULL    | NULL                          |    13 |   100.00 | NULL        |
|  1 | SIMPLE      | ug    | NULL       | ref    | group_id,group_leader | group_id    | 3       | wareznet.g.group_id           | 25034 |    10.00 | Using where |
|  1 | SIMPLE      | a     | NULL       | ref    | group_id,auth_role_id | group_id    | 3       | wareznet.g.group_id           |   240 |   100.00 | NULL        |
|  1 | SIMPLE      | r     | NULL       | eq_ref | PRIMARY,ath_op_id     | PRIMARY     | 6       | wareznet.a.auth_role_id,const |     1 |   100.00 | NULL        |
+----+-------------+-------+------------+--------+-----------------------+-------------+---------+-------------------------------+-------+----------+-------------+




« Poslední změna: 23. 02. 2020, 12:42:02 od Petr Krčmář »
T_PAAMAYIM_NEKUDOTAYIM


alex6bbc

  • *****
  • 1 677
    • Zobrazit profil
    • E-mail
Re:SQL dotaz trvá po aktualizaci pět minut
« Odpověď #1 kdy: 23. 02. 2020, 14:23:50 »
nechce se mi studovat indexy a explain.
nejvice radku je v tabulce ug, tak tam je to treba co nejvic omezit.

vidim v sql:
AND a.group_id = ug.group_id                                 
AND g.group_id = ug.group_id                                 

z toho plyne, ze i "AND a.group_id = g.group_id", nezmensi tahle podminka dalsi prohledavani?

martyd420

  • ***
  • 217
  • K U B U N T U
    • Zobrazit profil
    • E-mail
Re:SQL dotaz trvá po aktualizaci pět minut
« Odpověď #2 kdy: 23. 02. 2020, 14:52:08 »
"AND a.group_id = g.group_id" - žádná změna

Nakonec ale vyřešeno...
Přidáním indexu na ug.user_pending a přehozením těch podmínek.

Tak prozatím mi stačí fakt, že to funguje a já se po 7 hodinách můžu zabývat něčím jiným..
Ale stejně, pokud bhy někdo věděl čím to je, byl bych rád za tip..
V původní databázi ten index není a jede to rychle.
T_PAAMAYIM_NEKUDOTAYIM

Re:SQL dotaz trvá po aktualizaci pět minut
« Odpověď #3 kdy: 23. 02. 2020, 22:58:51 »
Tak je možné že se mezi verzemi změnilo... ...jen hádám, proč může být jiný execution plan.

Logik

  • *****
  • 1 043
    • Zobrazit profil
    • E-mail
Re:SQL dotaz trvá po aktualizaci pět minut
« Odpověď #4 kdy: 24. 02. 2020, 11:24:46 »
"Ale stejně, pokud bhy někdo věděl čím to je, byl bych rád za tip.."
Nemůžu si odpustit: je to tím, že používáš bastl zvaný MySQL :-) za těch 7 hodin bys to přepsal na postgres :-).

Ale jinak - zkusil jsi ANALYZE TABLE na ty tabulky?Nevyčteš něco z EXPLAIN EXTENDED?https://dev.mysql.com/doc/refman/5.6/en/explain-extended.html