sql >> Database >  >> RDS >> Mysql

Mysql verbetert de SELECT-snelheid

neem de tijd om mijn antwoord hier te lezen:(heeft vergelijkbare volumes als die van jou)

500 miljoen rijen, scan van 15 miljoen rijen in 0,02 seconden.

MySQL en NoSQL:help me de juiste te kiezen

pas dan je table engine als volgt aan naar innodb:

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;

u zou in plaats daarvan het volgende als de primaire sleutel kunnen beschouwen:

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

maar alleen als de waarde niet een GROOT varchar-type is!

vraag als voorheen:

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

hoop dat dit helpt :)

BEWERKEN

oh vergeten te vermelden - gebruik geen alter-tabel om het motortype van mysiam naar innodb te wijzigen, maar dump de gegevens liever in csv-bestanden en importeer ze opnieuw in een nieuw gemaakte en lege innodb-tabel.

let op ik bestel de gegevens tijdens het exportproces - geclusterde indexen zijn de SLEUTEL!

Exporteren

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...

Importeren

importeer terug in de tabel in de juiste volgorde!

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...


  1. Hoe meerdere arrays in een database invoegen?

  2. pgmemcache versus oneindige cache

  3. Hoe gebruik ik mysqli_query() in PHP?

  4. MySQL - Hoe tijden optellen?