trochę czasu, aby przeczytać moją odpowiedź tutaj: (ma podobne ilości Twoi)
500 milionów wierszy, 15 mln zakres wierszy skanowanie w 0,02 sekundy.
MySQL and NoSQL: Help me to choose the right one
następnie zmienić silnik stół do InnoDB następująco:
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;
można rozważyć następujące jako klucz podstawowy Zamiast:
primary key (tag_id, tag_date, value) -- added value save some I/O
ale tylko wtedy, gdy wartość isnt niektóre DUŻY typ varchar!
zapytania jak poprzednio:
select
tag_date,
value
from
tag_date_value
where
tag_id = 1 and
tag_date between 'x' and 'y'
order by
tag_date;
nadziei, że to pomoże :)
EDIT
oh zapomniałem wspomnieć - wykorzystanie Dont alter table zmienić typ silnika od mysiam do InnoDB ale raczej zrzuć dane do plików csv i ponownie zaimportuj do nowo utworzonej i pustej tabeli innodb.
Uwaga Zamawiam dane podczas procesu eksportu - indeksy klastrowe to KLUCZ!
Export
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...
importu
import z powrotem do tabeli w odpowiedniej kolejności!
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...
Po pominięciu opcji "ZAMÓWIENIE PRZEZ", czy to pomaga? Czy możesz publikować rzeczywiste terminy zapytań zi bez ORDER BY? –
opublikować wyjaśnienie zapytania wykonując EXPLAIN SELECT data, wartość Z tabeli gdzie tag = "a" i data MIĘDZY "x" i "y" według daty – piyush
Nie wspomniano o indeksach - spróbuj jedną w kolumnie (tag, data, wartość) lub pojedynczy indeks złożony zawierający wszystkie trzy. Pamiętaj, że kolejność kolumn ma znaczenie w złożonym indeksie - począwszy od lewej, jeśli kolumna nie jest przywoływana w zapytaniu, indeks nie będzie używany. –