ฉันคิดว่า gotcha ที่ใหญ่ที่สุดจะอยู่ที่ innodb ซึ่งเป็นธุรกรรม คุณจะต้องการทราบว่าไลบรารี MySQL ที่แอปพลิเคชันของคุณใช้อยู่เป็นค่าเริ่มต้นหรือไม่
ตัวอย่างเช่นPythonไม่ยอมรับอัตโนมัติ ซึ่งหมายความว่าหากแอปพลิเคชันแทรกแถวก่อนที่จะปิดการเชื่อมต่อที่แทรกจะถูกย้อนกลับหลังจากที่คุณเปลี่ยนเป็น Innodb สคริปต์ไพ ธ อนจะต้องแน่ใจว่าได้โทรไปที่ connection.commit ();
จุดที่แตกต่างก็คือรอบ ๆ แทรกหรืออัพเดตหลายแถว พิจารณาการแทรกหลายแถวเดียว
insert into tbl values (...row1...), (...row2...), (...rowN....);
พิจารณาสิ่งที่เกิดขึ้นหากมีข้อผิดพลาดบางอย่างเช่นการชนคีย์ที่ไม่ซ้ำกันในแถว 3 ด้วย MyISAM จะมีการเขียนสองแถวแรกภายใต้ innodb ทุกแถวที่เขียนจะถูกย้อนกลับโดยไม่เหลือสิ่งใดที่เขียนในตอนที่เกิดข้อผิดพลาด
ด้วย Innodb คุณจะเข้าสู่โลกแห่งการหยุดชะงัก สิ่งเหล่านี้ไม่ได้เลวร้ายอย่างแท้จริงเว้นแต่ว่าพวกเขากำลังเกิดขึ้นกับความถี่ดังกล่าวเพื่อป้องกันไม่ให้งานใด ๆ เสร็จสิ้น อย่างไรก็ตามแอปพลิเคชันของคุณจะต้องมีรหัสในลักษณะที่พวกเขาคาดการณ์การหยุดชะงักและจัดการอย่างเหมาะสม (ซึ่งน่าจะหมายถึงการลองใหม่อีกครั้ง)
พิจารณาข้อ จำกัด หน่วยความจำ / การจัดเก็บ Innodb เป็นทรัพยากรที่เข้มข้นกว่า MyISAM มาก หากคุณมี RAM เพียงพอที่จะทำให้พูลบัฟเฟอร์ของคุณมีขนาดใหญ่พอที่จะรองรับตารางทั้งหมดของคุณได้
ค้นหาตารางที่มีคีย์หลักขนาดใหญ่ การจัดทำดัชนีแบบกลุ่มของ Innodb หมายถึงดัชนีรองแต่ละรายการมีสำเนาของแถว PK ที่สอดคล้องกันอีกชุด หากคุณมีดัชนีรอง 2 อันหมายความว่าแต่ละแถว PK จะถูกเก็บไว้ 3 ครั้ง (PK + แต่ละดัชนี) หาก pk ครอบคลุมหลายคอลัมน์และประเภทข้อมูลขนาดใหญ่ (char (N)) คุณสามารถดูว่าข้อกำหนดของดัชนีสามารถระเบิดได้อย่างรวดเร็วได้อย่างไรภายใต้ innodb