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

MySQL migliora la velocità SELECT

prenditi del tempo per leggere la mia risposta qui:(ha volumi simili ai tuoi)

500 milioni di righe, scansione di 15 milioni di righe in 0,02 secondi.

MySQL e NoSQL:aiutami a scegliere quello giusto

quindi modifica il motore della tabella in innodb come segue:

create table tag_date_value
(
tag_id smallint unsigned not null, -- i prefer ints to chars
tag_date datetime not null, -- can we make this date vs datetime ?
value int unsigned not null default 0, -- or whatever datatype you require
primary key (tag_id, tag_date) -- clustered composite PK
)
engine=innodb;

potresti invece considerare quanto segue come chiave primaria:

primary key (tag_id, tag_date, value) -- added value save some I/O

ma solo se il valore non è un tipo di varchar GRANDE!

interrogare come prima:

select
 tag_date, 
 value
from
 tag_date_value
where
 tag_id = 1 and
 tag_date between 'x' and 'y'
order by
 tag_date;

spero che questo aiuti :)

MODIFICA

oh ho dimenticato di menzionare:non utilizzare alter table per cambiare il tipo di motore da mysiam a innodb, ma piuttosto scaricare i dati in file CSV e reimportarli in una tabella innodb appena creata e vuota.

nota che sto ordinando i dati durante il processo di esportazione:gli indici cluster sono la CHIAVE!

Esporta

select * into outfile 'tag_dat_value_001.dat' 
fields terminated by '|' optionally enclosed by '"'
lines terminated by '\r\n'
from
 tag_date_value
where
 tag_id between 1 and 50
order by
 tag_id, tag_date;

select * into outfile 'tag_dat_value_002.dat' 
fields terminated by '|' optionally enclosed by '"'
lines terminated by '\r\n'
from
 tag_date_value
where
 tag_id between 51 and 100
order by
 tag_id, tag_date;

-- etc...

Importa

importare di nuovo nella tabella nell'ordine corretto!

start transaction;

load data infile 'tag_dat_value_001.dat' 
into table tag_date_value
fields terminated by '|' optionally enclosed by '"'
lines terminated by '\r\n'
(
tag_id,
tag_date,
value
);

commit;

-- etc...