Mysql
 sql >> база данни >  >> RDS >> Mysql

Mysql подобрява скоростта на SELECT

отделете време, за да прочетете отговора ми тук:(има подобни обеми на вашите)

500 милиона реда, 15 милиона обхват на редове сканиране за 0,02 секунди.

MySQL и NoSQL:Помогнете ми да избера правилния

след това променете вашата машина за таблица към 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;

вместо това може да разгледате следното като първичен ключ:

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

но само ако стойността не е някакъв тип LARGE varchar !

заявка както преди:

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

надявам се това да помогне :)

РЕДАКТИРАНЕ

о, забравих да спомена – не използвайте alter table, за да промените типа на двигателя от mysiam на innodb, а по-скоро изхвърлете данните в csv файлове и повторно импортирайте в новосъздадена и празна таблица innodb.

имайте предвид, че поръчвам данните по време на процеса на експортиране - клъстерираните индекси са КЛЮЧЪТ!

Експортиране

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

Импортиране

импортирайте обратно в таблицата в правилен ред!

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Архивиране и възстановяване на MySQL от командния ред

  2. Как да импортирам CSV файл в MySQL таблица?

  3. Как да създадете пагинация с PDO PHP

  4. Mysql Real Escape String PHP функция Добавяне на \ към My Field Entry

  5. Кой е най-добрият тип данни за телефонен номер в MySQL и какво трябва да бъде съпоставянето на Java тип за него?