Quantità Query
Quantità Query postato il 09/01/2010 11:51:12 nel forum programmazione, open source e hosting
Buongiorno a tutti
Vi propongo oggi una questione che mi sta facendo cercare in lungo e in largo per rete, senza alcun risultato: Il conteggio delle query.
Com'è ovvio che sia cerco costantemente di ottimizzare il numero delle query per pagina che il mio sitozzo deve effettuare, per evitare che ad ogni sessione i giocatori richiamino numeri spropositati di operazioni su DB, riuscendo a non superare quasi mai le 2-3 interrogazioni... tuttavia quello che mi domandavo è:
Se io creo delle sub-query o concatenazioni, a livello di conteggio mi vale 1 query o 2 query?
Io davvero non sono riuscita a trovare risposta a questa domanda da nessuna parte, non so se magari c'è un termine specifico di cui non sono a conoscenza... eventualmente se oltre a questa domanda avete un link con info generiche su questo argomento mi fareste un favore enorme.
(poi magari mi faccio problemi per nulla, non so XD)
Pagine → 1 2
09/01/2010 12:34:48 e modificato da tsumi il 09/01/2010 12:35:51
Allora:
da un rapido test su mysql il contatore delle query facendo una query annidata tipo (esempio idiota):
SELECT * FROM (SELECT * FORM tabella WHERE 1) AS tab WHERE id=1;
aumenta di 1 quindi mysql la conteggia come 1 query
Di fatto poi quelle sono due query ... quindi nei tuoi conteggi potresti considerarla come doppia.
Ad ogni modo se guardi l'ottimizzazione ti consiglio di non pensare tanto al numero delle query quanto al loro contenuto.
Una semplice select su un id numerico indicizzato ed una join su 3-4 tabelle con una mezza dozzina di condizioni in where contano entrambe come una query ma richiedono tempi molto diversi.
Tsu
09/01/2010 12:41:09
Uh grazie mille, non sapevo ci fosse un contatore query o_o a saperlo non impazzivo tutta la mattina XDD
Per l'ottimizzazione delle tabelle ed interrogazioni ho trovato info a sufficienza (che ovviamente sto seguendo) quindi su quel lato mi considero messa abbastanza bene
ti ringrazio davvero, ora ottimizzerò al massimo ù___ù
09/01/2010 13:27:14 e modificato da blancks il 09/01/2010 13:29:44
tsumi ha scritto:
Una semplice select su un id numerico indicizzato ed una join su 3-4 tabelle con una mezza dozzina di condizioni in where contano entrambe come una query ma richiedono tempi molto diversi.
Tsu
Quello che dice Tsu è sacrosanto ma aggiungo che se una Join ti consente di evitare di fare due query per ottenere i medesimi dati è sempre bene usarla.
Per quanto impieghi generalmente piu' tempo di una comune query, ne impiega sempre di meno di due query distinte atte a prelevare i medesimi dati.
Inoltre, usa mysqli ad oggetti. (su cui ho personalmente fatto dei test di performance, ed è veloce di circa il doppio rispetto a mysql procedurale)
Poi penso che tutte i consigli sull'ottimizzazione delle tabelle ce le possiamo evitare (visto quanto dici :p), ma voglio ricordare una cosa che spesso ho visto dimenticare un po in tutte queste tips online: definire sempre delle grandezze appropriate per i tipi di dato che si prevedono di incamerare.
- se sai che un dato che andrai a memorizzare ha lunghezza fissa usa char
- non usare di default INT(11) e compagnia bella se poi andrai a memorizzare numeri di massimo 4 cifre.
etc etc etc..
ps: è naturale che il conteggio delle query, anche nel caso di subquerys ne conti solo una, così non fosse non potrebbero essere eseguite in quanto, mysql_query, esegue solo una query a richiamo di funzione per limitare i tentativi di injection dannose.
09/01/2010 14:20:28
Uh grazie mille, non sapevo ci fosse un contatore query o_o a saperlo non impazzivo tutta la mattina XDD
SHOW STATUS;
stampa un po' di info sul server mysql tra cui il totale delle query processate sul server dal suo avvio.
Occhio che:
- SHOW STATUS incrementa di 1 il contatore (è una query)
- Il valore è relativo al server, se ci sono altri utenti che lavorano, se usi phpmyadmin, se visualizzi nache altre pagine che fanno query ecc questo valore incrementa ... quindi diciamo che salvo usarlo solo per fare dei test in locale è abbastanza inutile.
Tsu
09/01/2010 16:30:43
Inoltre, usa mysqli ad oggetti. (su cui ho personalmente fatto dei test di performance, ed è veloce di circa il doppio rispetto a mysql procedurale)
Non so cosa sia ma ci dò sicuramente un'occhiata, grazie ^_^
ma voglio ricordare una cosa che spesso ho visto dimenticare un po in tutte queste tips online: definire sempre delle grandezze appropriate per i tipi di dato che si prevedono di incamerare.
fortunatamente sono una risparmiatrice incallita e la cosa mi viene naturale lol
SHOW STATUS;
stampa un po' di info sul server mysql tra cui il totale delle query processate sul server dal suo avvio.
Peccato per quel che mi dici, sono abituata a lavorare direttamente online visto che lavoro su pc diversi e non ho voglia di installare apache ogni volta XD
09/01/2010 16:59:28
innanzi tutto un LOL per la tua firma... ci rido da 10 minuti buoni...
inoltre... è un bene usare bene i Join e richiamare SOLO i campi che servono (quindi un SELECT * fallo solo se ti serve tutto!)
09/01/2010 17:14:59
hairac ha scritto:
Non so cosa sia ma ci dò sicuramente un'occhiata, grazie ^_^
http://php.net/mysqli http://php.net/mysqli ↗
A te :)
09/01/2010 18:10:53
blancks ha scritto: [quote]hairac ha scritto:
Non so cosa sia ma ci dò sicuramente un'occhiata, grazie ^_^
http://php.net/mysqli http://php.net/mysqli ↗
A te :)[/quote]
Ho letto che ancora non è un sistema definitivo, e che potrebbe essere eliminato nelle prossime versioni di php... non mi sembra molto sicuro installarlo, se poi tocca riprogrammare tutto @__@
_sway_ ha scritto: innanzi tutto un LOL per la tua firma... ci rido da 10 minuti buoni...
muahhaha anche io ho risa da morire la prima volta che l'ho letto XD
09/01/2010 19:34:52
Io personalmente costruisco una classe che mi fa da gestore del database.
Se un giorno cambia qualcosa o io cambio dbms mi basterà cambiare le funzioni di dialogo nella classe e non per tutto l'engine, da questo punto di vista sinceramente non mi vedo il problema sussistere, poi non so con che logica programmativa stai tirando su il tutto.
11/01/2010 18:59:39 e modificato da tdl - staff il 11/01/2010 19:01:27
Ma guarda che non è assolutamente come dici tu. Dipende da linguaggio DB a linguaggio DB usato l'inficiare del numero di query. Per assurdo mysql predilige una struttura a più query ma rapide piuttosto che una sola ma lunga.
EDIT:
il fatto è che devi tenere conto delle singole istruzioni quindi ad esempio una select è molto più veloce di una select join.
Discussione seguita da
Pagine → 1 2
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Foundation Galactic Frontier ↗
Cafuné ↗
Fallen Gods ↗
CRSED: F.O.A.D. ↗
Imperion ↗
Seconda Era ↗
Tiles Survive ↗
Enlisted ↗
Tibia ↗
World of Tanks ↗