sql >> Databáze >  >> RDS >> Mysql

Mysql zlepšuje rychlost SELECT

udělejte si čas na přečtení mé odpovědi zde:(má podobné objemy jako vy)

500 milionů řádků, 15 milionů skenování rozsahu řádků za 0,02 sekundy.

MySQL a NoSQL:Pomozte mi vybrat ten správný

poté upravte svůj tabulkový stroj na innodb následovně:

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;

místo toho můžete za primární klíč považovat následující:

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

ale pouze pokud hodnota není nějaký VELKÝ typ varchar!

dotaz jako dříve:

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

doufám, že to pomůže :)

UPRAVIT

zapomněl jsem zmínit - nepoužívejte alter table ke změně typu motoru z mysiam na innodb, ale raději vypište data do csv souborů a znovu je importujte do nově vytvořené a prázdné tabulky innodb.

všimněte si, že objednávám data během procesu exportu - KLDR jsou klastrované indexy!

Exportovat

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

Importovat

importujte zpět do tabulky ve správném pořadí!

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. Zaujměte lidský přístup ke správě dat

  2. Rekurzivní dotaz MySQL s relačním innoDB

  3. Jiné než latinské znaky &au

  4. Jak použít AJAX k nahrání velkého souboru CSV?