MySQL Forums
Forum List  »  Italian

Ottimizzare query
Posted by: Marco Tiraferri
Date: March 01, 2018 10:25AM

Ciao a tutti,
Prima volta che scrivo in questo forum spero di essere in-topic!

Abbiamo problemi di prestazioni su un portale, analizzando slow query log la prima query risulta avere un tempo medio di 250 secondi!!

Ho provato ad eseguire l'explainin phpmymyadmin (che è lo strumento che usiamo per interagire con il db)
EXPLAIN SELECT T16_Id_SottoSito,
T16_Id_Pagina,
T16_Stato,
T16_Lingua,
T09_Id_SottoSito,
T09_Id_Canale,
T16_Template,
(SELECT T32_Id_Indice FROM VociIndice WHERE T32_Id_SottoSito = T16_Id_SottoSito AND T32_Id_Pagina = T16_Id_Pagina LIMIT 1) AS idIndice,
T16_StrilloTesta,
T16_StrilloImage,
T16_StrilloDesc,
T16_StrilloDate,
T16_TitoloUrl,
T09_Date_Born AS dataOrd,
T09_Date_Die AS dataOrdEnd
FROM Pagine JOIN CanaliPagine
ON T09_Id_SottoSito = T16_Id_SottoSito
AND T09_Id_Pagina = T16_Id_Pagina
AND T09_Stato = T16_Stato
AND T09_Lingua = T16_Lingua
WHERE T16_Nascosta = 0
AND T16_Disabilitata = 0
AND T16_Stato = 0
AND T16_Lingua = 0
AND T16_Permessi IN ('V_ALL')
AND (
( T09_Id_SottoSito = 'RIC' AND T09_Id_Canale = '14')
)
AND T09_Date_Born <= '2018-02-21'
AND T16_Date_Born <= '2018-02-21'
AND T16_Date_Die >= '2018-02-21' AND T16_Id_Pagina != 3510
ORDER BY T09_Date_Born DESC, T16_Ts_Mod DESC
LIMIT 0, 10;

Il risultato è stato il seguente:

ottenendo questi risultati:

id : 1
select_type: PRIMARY
table: Pagine
partitions: NULL
type: range
possible_keys: PRIMARY,Indice2,Indice3,Pagine_index_1,T16_Permessi
key: PRIMARY
key_len: 7
ref: NULL
rows: 31865
filtered: 0.00
Extra: Using where; Using temporary; Using filesort
------------------------------------------------
id : 1
select_type: PRIMARY
table: CanaliPagine
partitions: NULL
type: eq_ref
possible_keys: PRIMARY,T09_Date_Born,CanaliPagine_index_1
key: PRIMARY
key_len: 16
ref: const,const,Entra.Pagine.T16_Id_Pagina,Entra.Pagine.T16_Stato,const
rows: 1
filtered: 50.00
Extra: Using where
-----------------------------------------------
id : 2
select_type: DEPENDENT SUBQUERY
table: VociIndice
partitions: NULL
type: ref
possible_keys: PRIMARY
key: PRIMARY
key_len: 3
ref: Entra.Pagine.T16_Id_SottoSito
rows: 73
filtered: 10.00
Extra: Using where

Considerando che la tabella pagine ha questi indici:
`Entra`.`Pagine` PRIMARY KEY (`T16_Id_SottoSito`, `T16_Id_Pagina`, `T16_Stato`, `T16_Lingua`) USING BTREE;

`Entra`.`Pagine` INDEX `Indice1` (`T16_Alfabetico`) USING BTREE;

`Entra`.`Pagine` INDEX `Indice2` (`T16_Date_Born`) USING BTREE;

`Entra`.`Pagine` INDEX `Indice3` (`T16_Date_Die`) USING BTREE;

`Entra`.`Pagine` INDEX `Indice4` (`T16_MiniTemplate`) USING BTREE;

`Entra`.`Pagine` INDEX `Pagine_index_1` (`T16_Nascosta`, `T16_Disabilitata`, `T16_Stato`, `T16_Lingua`, `T16_Id_SottoSito`, `T16_Id_Pagina`) USING BTREE;


`Entra`.`Pagine` INDEX `T16_TitoloUrl` (`T16_TitoloUrl`) USING BTREE;

`Entra`.`Pagine` INDEX `T16_Permessi` (`T16_Permessi`) USING BTREE;

`Entra`.`Pagine` INDEX `T16_Ts_Mod` (`T16_Ts_Mod`) USING BTREE;


Non capisco come mai legge 31865 su 46626, usi range come tipo di join e nella colonna extra indichi Using where; Using temporary; Using filesort che a quanto ho capito significa che mysql crea degli indici temporanei.

Devo creare un nuovo indice? con quali campi?

Grazie.
Marco.

Options: ReplyQuote


Subject
Views
Written By
Posted
Ottimizzare query
637
March 01, 2018 10:25AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.