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

Mysql forbedre SELECT-hastigheden

tag dig tid til at læse mit svar her:(har lignende mængder som dit)

500 millioner rækker, 15 millioner rækker scanning på 0,02 sekunder.

MySQL og NoSQL:Hjælp mig med at vælge den rigtige

rediger derefter din tabelmotor til innodb som følger:

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;

du kan overveje følgende som den primære nøgle i stedet:

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

men kun hvis værdien ikke er en STOR varchar-type!

forespørgsel som før:

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

håber dette hjælper :)

REDIGER

åh glemte at nævne - brug ikke alter table til at ændre motortype fra mysiam til innodb, men dump snarere dataene ud i csv-filer og genimporter til en nyoprettet og tom innodb-tabel.

bemærk, at jeg bestiller dataene under eksportprocessen - klyngede indekser er NØGLEN!

Eksporter

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

Importer

importer tilbage til tabellen i korrekt rækkefølge !

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. VÆLG IND ved hjælp af Oracle

  2. Forkert strengværdi:'\xF0\x9F\x8E\xB6\xF0\x9F...' MySQL

  3. Hvor forskellig er PostgreSQL fra MySQL?

  4. Docker-compose tjek om mysql-forbindelsen er klar