sql >> Databasteknik >  >> RDS >> Mysql

Mysql förbättrar SELECT-hastigheten

ta dig tid att läsa mitt svar här:(har liknande volymer som ditt)

500 miljoner rader, 15 miljoner rader avsökning på 0,02 sekunder.

MySQL och NoSQL:Hjälp mig att välja rätt

ändra sedan din tabellmotor till innodb enligt följande:

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 betrakta följande som primärnyckel istället:

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

men bara om värdet inte är någon STOR varchar-typ!

fråga som tidigare:

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

hoppas detta hjälper :)

REDIGERA

oh glömde att nämna - använd inte alter table för att ändra motortyp från mysiam till innodb utan dumpa istället ut data till csv-filer och återimportera till en nyskapad och tom innodb-tabell.

notera att jag beställer data under exportprocessen - klustrade index är NYCKELN!

Exportera

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

Importera

importera tillbaka till tabellen i rätt ordning !

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. Hur man installerar SQL Server på Ubuntu 18.04

  2. Flerkolumnindex på 3 fält med heterogena datatyper

  3. Använd SCOPE_IDENTITY() för att returnera det senast infogade identitetsvärdet i samma omfattning (SQL-server)

  4. Hur man installerar och konfigurerar ClickHouse på Ubuntu 20.04