Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mysql meningkatkan kecepatan SELECT

luangkan waktu untuk membaca jawaban saya di sini:(memiliki volume yang mirip dengan milik Anda)

500 juta baris, 15 juta rentang baris memindai dalam 0,02 detik.

MySQL dan NoSQL:Bantu saya memilih yang benar

kemudian ubah mesin tabel Anda menjadi innodb sebagai berikut:

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;

Anda dapat mempertimbangkan yang berikut ini sebagai kunci utama:

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

tetapi hanya jika nilainya bukan tipe varchar BESAR!

kueri seperti sebelumnya:

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

semoga membantu :)

EDIT

oh lupa menyebutkan - jangan gunakan tabel ubah untuk mengubah jenis mesin dari mysiam ke innodb melainkan buang data ke dalam file csv dan impor ulang ke tabel innodb yang baru dibuat dan kosong.

perhatikan saya memesan data selama proses ekspor - indeks berkerumun adalah KUNCInya!

Ekspor

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

Impor

impor kembali ke tabel dalam urutan yang benar !

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. Memantau koneksi yang digunakan di mysql untuk men-debug 'terlalu banyak koneksi'

  2. Membuat baris kosong untuk mengulang baris

  3. memasukkan data ke database mysql menggunakan php

  4. Dapatkan kembali ruang disk setelah menjatuhkan basis data di mysql

  5. Tampilkan semua tabel. Deskripsikan seperti fungsi