ฉันมีตาราง MySQL MyISAM ที่มีข้อมูลราคาประมาณ 400 ล้านแถว (ข้อมูล 7GB + ดัชนี 9GB) โดยมี 3 คอลัมน์:
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$$
จำนวน id
s ที่แตกต่างกัน (ฉันคิดว่าคาร์ดินัลลิตีคือคำ) คือ ~500 และสำหรับช่วงเวลาที่น่าสนใจส่วนใหญ่ ภายในช่วงเวลาเหล่านั้น จำนวนคาร์ดินัลลิตี้ของ id
จะต่ำกว่า ~20 (ดังนั้นจึงมี ID ที่แตกต่างกันเพียง 20 รหัสเท่านั้นระหว่างเดือนมีนาคม ที่ 1 และ 2)
ข้อความค้นหาอยู่ในรูปแบบเกือบทั้งหมด:
select ts, price from prices where ts between {t1} and {t2} and id = {id}.
ดูเหมือนว่าดัชนีบางตัวควรเร่งความเร็วให้เร็วขึ้น
ดัชนีรวมใน ts
และ id
หรือดัชนีแยกกันใน ts
และ id
จะดีกว่าหรือไม่ ทางเลือกที่ 3 บ้างไหม? ฉันขอขอบคุณคำแนะนำว่าฉันสามารถเรียนรู้วิธีตอบคำถามนี้ด้วยตัวเองได้จากที่ไหน
ตารางประเภทอื่น (InnoDB?) จะเหมาะสมกับวัตถุประสงค์ของฉันมากกว่าหรือไม่