เรามีไซต์ที่หลังจากผ่านไปไม่กี่ปี ได้สร้างบันทึก 10 ล้านรายการในตารางย่อหน้า_รายการ นี่เป็นผลมาจากการย้ายข้อมูลจำนวนมาก (ซึ่งเกี่ยวข้องกับย่อหน้า) และตอนนี้มีเด็กกำพร้าจำนวนมาก (อาจถึง 90% ของจำนวนนั้น)
การแก้ไขการอ้างอิงเอนทิตีจัดส่งพร้อมกับคำสั่ง Drush เพื่อ 'ล้าง' เอนทิตีที่ถูกละเลย ดูเหมือนว่าจะใช้งานได้ - แต่ด้วยจำนวนนี้ในการดูผ่านดูเหมือนว่าจะใช้เวลานานมากในการตรวจสอบทั้งหมด ควรสังเกตว่าพวกเขาเป็น ไม่ ถูกละเลยเนื่องจากเอนทิตีโฮสต์ถูกลบ เนื่องจากวิธีการย้ายข้อมูล ย่อหน้าจึงถูกสร้างขึ้นใหม่และแทนที่ตามข้อกำหนดการย้ายข้อมูล เราไม่สามารถเปลี่ยนแปลงสิ่งนี้ได้ในขณะนี้ จนกว่าจะมีแฮชบางอย่างในชุดย่อยของข้อมูลเพื่อระบุว่าเราควรนำเข้าหรือข้ามไป
ฉันสงสัยว่านี่เป็นสาเหตุของการสืบค้นในแบบฟอร์มแก้ไขเมื่อแก้ไขย่อหน้าช้าลงเมื่อเวลาผ่านไป ส่งผลให้ไม่สามารถดำเนินการได้ (MariaDB หยุดตอบสนอง) แม้ว่าฟิลด์ทั้งหมดจะได้รับการจัดทำดัชนีตามสคีมาย่อหน้า แต่ประสิทธิภาพจะลดลง
หากฉันล้างข้อมูลและปล่อยให้ลบ 200,000 รายการ ตัวอย่างเช่น การเรียกใช้ OPTIMIZE sql บนตาราง paragraphs_item ดูเหมือนจะสนับสนุนทฤษฎีนี้ การแก้ไขครั้งแรกใช้เวลา 8 วินาทีในการโหลดย่อหน้า หลังจากนั้นก็เกือบจะทันที ดังนั้น การลบย่อหน้าที่ไม่ได้ใช้ทั้งหมดคือสิ่งที่ผมคิดว่าเราควรจะทำ ฉันทราบดีว่า OPTIMIZE บน InnoDB ส่งผลให้เกิดการสร้างดัชนีใหม่ แต่ในกรณีที่คุณอัปเกรดเวอร์ชันของฐานข้อมูล ข้อมูลนี้มีขนาดใหญ่มากจนฉันคิดว่าไม่สามารถสร้างใหม่ได้ตามเกณฑ์ที่กำหนด
มีวิธีที่เร็วกว่าในการค้นหาและลบย่อหน้าที่ถูกละเลยนอกเหนือจากการล้างข้อมูลหรือไม่