ฉันได้ติดตามคำถามก่อนหน้านี้ของฉันเกี่ยวกับความเร็วการนำเข้าด้วย Inno-Tables (ประหลาดใจ!)
สถานการณ์สมมติ
ฉันพยายามนำเข้าฐานข้อมูลขนาดใหญ่ * การถ่ายโอนข้อมูลในเครื่อง dev ท้องถิ่นของฉันในเวลาที่เหมาะสม เรามีจำนวนมากKEY
ที่แนบมากับตารางซึ่งกลายเป็นคอขวด แต่ยังคงมีความสำคัญสำหรับระบบสดของเรา
แนวทางของฉันหลังจากถามคำถามข้างต้นคือการลบKEY ...
คำสั่งจากการถ่ายโอนข้อมูลนำเข้าและเพิ่มคีย์อีกครั้ง
อย่างไรก็ตามฉันมักจะพบว่าตัวเองกำลังแก้ไขการถ่ายโอนข้อมูลปัจจุบันเพื่อนำเข้าภายในเครื่องและฉันเจอ "ความคิดเห็น" ตลกเหล่านี้ (The disable/enable keys
-lines)
--
-- Dumping data for table `monster`
--
LOCK TABLES `monster` WRITE;
/*!40000 ALTER TABLE `monster` DISABLE KEYS */;
INSERT … INSERT … INSERT
/*!40000 ALTER TABLE `monster` ENABLE KEYS */;
UNLOCK TABLES;
แต่ในความเป็นจริง "ความคิดเห็น" เหล่านี้เป็นเงื่อนไข MySql-Statement
นั่นคือข่าวสำหรับฉัน แต่ตกลงให้รูปแบบผลลัพธ์mysql --version
ทุกอย่างดูดีสำหรับฉัน:
mysql Ver 14.14 Distrib 5.5.38, for debian-linux-gnu (x86_64) using readline 6.3
สิ่งที่ฉันถือว่า
ตารางถูกล็อค (ดีมันเป็นเพียงฉันบน mashine dev) จากนั้นคีย์ตามที่กำหนดในตารางคีมาจะถูกปิดใช้งานนำเข้าข้อมูลและเปิดใช้งานคีย์
ดังนั้นระหว่าง "การแทรกข้อมูล" - เฟสไม่ควรเสียเวลากับคีย์ แต่ควรตรวจสอบหลังจากแทรกข้อมูลทั้งหมดแล้ว
ฉันจะคิดว่านี่เป็นพฤติกรรมแบบเดียวกันกับถ้าฉันลบKEY 'foo' (foo)'
-line ทั้งหมดออกจากการถ่ายโอนข้อมูลนำเข้าการถ่ายโอนข้อมูลและเรียกใช้สคริปต์ADD KEY 'foo' ...
หลังจากนั้น
สิ่งที่ฉันสังเกต
มันเป็นวิธีที่เร็วกว่าในการลบคีย์นำเข้าและเพิ่มคีย์ด้วยตนเองอีกครั้งจากนั้นขึ้นอยู่กับDISABLE KEYS
คำสั่งตามเงื่อนไขที่สร้างขึ้นของฉันmysqldump
การแก้ไขการถ่ายโอนข้อมูลด้วยตนเอง + นำเข้า mysql + เพิ่มคีย์ = 15 + 8 + 8 ≈ 30 นาที
การนำเข้า mysql ธรรมดา: เลิกแล้ว (ฉันเพิ่งได้รับเงิน 8 ชั่วโมง / วัน> :))
ฉันอดไม่ได้ที่จะคิดว่าฉันขาดอะไรบางอย่างที่เป็นพื้นฐานที่นี่ (หรือฐานข้อมูลกำลังหลอกหลอนฉัน)
mysqldump --innodb-optimize-keys
จาก Percona percona.com/doc/percona-server/5.5/management/…ระยะยาว: หยุดใช้ mysqldump และใช้ mydumper หรือ xtrabackup