Saya memiliki tabel MySQL MyISAM dengan sekitar 400 juta baris data harga (data 7GB + indeks 9GB) dengan 3 kolom:
CREATE TABLE `prices` (
`ts` datetime NOT NULL,
`id` int(10) unsigned NOT NULL,
`price` double NOT NULL,
PRIMARY KEY (`ts`,`instrid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1$$
Jumlah id
s yang berbeda (menurut saya kardinalitas adalah kata yang tepat) adalah ~500 dan untuk sebagian besar rentang waktu yang diminati, dalam rentang waktu tersebut, kardinalitas id
adalah ~20 yang lebih rendah (jadi hanya ada 20 atau lebih id yang berbeda antara bulan Maret 1 dan 2).
Kuerinya hampir secara eksklusif berbentuk:
select ts, price from prices where ts between {t1} and {t2} and id = {id}.
Sepertinya beberapa indeks harus mempercepatnya.
Apakah indeks gabungan pada ts
dan id
atau indeks terpisah pada ts
dan id
lebih baik? Beberapa alternatif ke-3? Saya juga akan menghargai rekomendasi di mana saya bisa belajar bagaimana menjawab pertanyaan ini sendiri.
Apakah tipe tabel lain (InnoDB?) lebih sesuai untuk tujuan saya?