Mysql
 sql >> Database >  >> RDS >> Mysql

Prestazioni di MySQL su una tabella da 6 milioni di righe

Quello che vuoi assicurarti è che la query utilizzerà SOLO l'indice, quindi assicurati che l'indice copra tutti i campi che stai selezionando. Inoltre, poiché si tratta di una query di intervallo coinvolta, è necessario avere prima il venid nell'indice, poiché viene interrogato come una costante. Vorrei quindi creare e indicizzare in questo modo:

ALTER TABLE events ADD INDEX indexNameHere (venid, date, time);

Con questo indice, tutte le informazioni necessarie per completare la query si trovano nell'indice. Ciò significa che, si spera, il motore di archiviazione sia in grado di recuperare le informazioni senza effettivamente cercare all'interno della tabella stessa. Tuttavia, MyISAM potrebbe non essere in grado di farlo, poiché non memorizza i dati nelle foglie degli indici, quindi potresti non ottenere l'aumento di velocità desiderato. In tal caso, prova a creare una copia della tabella e utilizza il motore InnoDB sulla copia. Ripeti gli stessi passaggi e verifica se ottieni un aumento significativo della velocità. InnoDB lo fa memorizza i valori dei campi nelle foglie dell'indice e consenti la copertura degli indici.

Ora, si spera che vedrai quanto segue quando spieghi la query:

mysql> EXPLAIN SELECT date, time FROM events WHERE venid='47975' AND date>='2009-07-11' ORDER BY date;

id  select_type table  type  possible_keys        key       [..]  Extra
1   SIMPLE   events range date_idx, indexNameHere indexNameHere   Using index, Using where