ก่อนที่คุณจะตัดสินใจเกี่ยวกับ MyISAM หรือ InnoDB คุณจะต้องตรวจสอบทั้ง Storage Engine ในแง่ของแคชแต่ละตัว
MyISAM
เมื่ออ่านแล้วดัชนีของตาราง MyISAM สามารถอ่านได้ครั้งเดียวจากไฟล์. MYI และโหลดใน MyISAM Key Cache (ปรับขนาดตามkey_buffer_size ) คุณจะทำให้. MyYAM ของตารางอ่านได้เร็วขึ้นได้อย่างไร ด้วยสิ่งนี้:
ALTER TABLE mytable ROW_FORMAT=Fixed;
ฉันเขียนเกี่ยวกับเรื่องนี้ในโพสต์ที่ผ่านมาของฉัน
InnoDB
ตกลงสิ่งที่เกี่ยวกับ InnoDB InnoDB จะทำดิสก์ I / O ใด ๆ สำหรับการสืบค้นหรือไม่? น่าแปลกที่ใช่มันไม่ !! คุณอาจจะคิดผมบ้าบอกว่า แต่มันเป็นความจริงอย่างแน่นอนแม้สำหรับการค้นหา SELECT ณ จุดนี้คุณอาจสงสัยว่า "InnoDB เป็นอย่างไรในการทำดิสก์ I / O สำหรับการสืบค้น"
ทุกอย่างกลับไปที่ InnoDB ซึ่งเป็นระบบจัดเก็บข้อมูล Transactional ACID เพื่อให้ InnoDB เป็นธุรกรรมจะต้องมีการสนับสนุนI
in ACID
ซึ่งก็คือ Isolation เทคนิคในการรักษาความโดดเดี่ยวสำหรับการทำธุรกรรมจะกระทำผ่านMVCC การควบคุมภาวะพร้อมกันหลายอย่าง กล่าวอย่างง่าย InnoDB บันทึกข้อมูลที่มีลักษณะเหมือนก่อนที่ธุรกรรมจะพยายามเปลี่ยนแปลง ที่ได้รับการบันทึกไว้ที่ไหน ในไฟล์ tablespace ของระบบรู้จักกันในชื่อ ibdata1 ที่ต้องใช้ดิสก์ของ I / O
เปรียบเทียบ
เนื่องจากทั้ง InnoDB และ MyISAM ทำดิสก์ I / O อะไรที่เป็นปัจจัยสุ่มกำหนดว่าใครเร็วกว่ากัน
- ขนาดของคอลัมน์
- รูปแบบคอลัมน์
- ชุดตัวละคร
- ช่วงของค่าตัวเลข (ต้องการ INT มากพอ)
- แถวถูกแบ่งข้ามบล็อก (การโยงแถว)
- การกระจายตัวของข้อมูลเกิดจาก
DELETEs
และUPDATEs
- ขนาดของคีย์หลัก (InnoDB มีดัชนีแบบคลัสเตอร์ต้องการการค้นหาคีย์สองครั้ง)
- ขนาดของรายการดัชนี
- รายการไปที่ ...
บทส่งท้าย
ดังนั้นในสภาพแวดล้อมที่อ่านหนักเป็นไปได้สำหรับตาราง MyISAM ที่มีรูปแบบแถวคงที่เพื่อให้มีประสิทธิภาพสูงกว่า InnoDB อ่านออกจาก InnoDB Buffer Pool หากมีข้อมูลเพียงพอที่จะเขียนลงในบันทึกการเลิกทำที่มีอยู่ใน ibdata1 เพื่อสนับสนุนพฤติกรรมการทำธุรกรรม กำหนดไว้ในข้อมูล InnoDB วางแผนประเภทข้อมูลแบบสอบถามและเครื่องมือจัดเก็บข้อมูลของคุณอย่างรอบคอบ เมื่อข้อมูลเติบโตขึ้นอาจเป็นเรื่องยากที่จะย้ายข้อมูลไปมา
โดยวิธีการที่ฉันเขียนบางสิ่งเช่นนี้ 5 วันที่ผ่านมา: ฉันจะกำหนดวงเงินหน่วยความจำสำหรับ mySQL ได้อย่างไร