มุมมองใน MySQL ได้รับการจัดการโดยใช้หนึ่งในสองขั้นตอนวิธีการที่แตกต่างกันหรือMERGE
เป็นเพียงการขยายแบบสอบถามด้วยนามแฝงที่เหมาะสม มันเป็นสิ่งที่ดูเหมือนว่ามุมมองทำให้ผลลัพธ์ลงในตารางชั่วคราวก่อนที่จะเรียกใช้คำสั่งย่อย WHERE และไม่มีดัชนีบนTEMPTABLE
MERGE
TEMPTABLE
ตัวเลือก 'สาม' คือUNDEFINED
ซึ่งบอกให้ MySQL เลือกอัลกอริทึมที่เหมาะสม MySQL จะพยายามใช้MERGE
เพราะมันมีประสิทธิภาพมากกว่า ข้อแม้หลัก:
หากไม่สามารถใช้อัลกอริทึม MERGE ได้จะต้องใช้ตารางชั่วคราวแทน ไม่สามารถใช้ MERGE ได้หากมุมมองมีโครงสร้างใด ๆ ต่อไปนี้:
ฟังก์ชันการรวม (SUM (), MIN (), MAX (), COUNT (), และอื่น ๆ )
ที่แตกต่าง
จัดกลุ่มตาม
การมี
LIMIT
ยูเนี่ยนหรือยูเนี่ยนทั้งหมด
แบบสอบถามย่อยในรายการที่เลือก
อ้างถึงค่าตามตัวอักษรเท่านั้น (ในกรณีนี้ไม่มีตารางอ้างอิง)
[src]
ฉันอยากลองเดาว่ามุมมองของคุณกำลังต้องการอัลกอริทึม TEMPTABLE ทำให้เกิดปัญหาประสิทธิภาพ
นี่เป็นบล็อกโพสต์เก่า ๆเกี่ยวกับประสิทธิภาพของการดูใน MySQL และดูเหมือนว่าจะไม่ดีขึ้น
อย่างไรก็ตามอาจมีแสงสว่างในตอนท้ายของอุโมงค์เกี่ยวกับปัญหาของตารางชั่วคราวนี้ที่ไม่มีดัชนี (ก่อให้เกิดการสแกนเต็มตาราง) ใน5.6 :
สำหรับกรณีที่จำเป็นต้องมีการทำให้เป็นจริงสำหรับแบบสอบถามย่อยในส่วนคำสั่ง FROM เครื่องมือเพิ่มประสิทธิภาพอาจเพิ่มความเร็วในการเข้าถึงผลลัพธ์โดยเพิ่มดัชนีลงในตารางที่ปรากฏ ... หลังจากเพิ่มดัชนีเครื่องมือเพิ่มประสิทธิภาพสามารถรักษาตารางที่ได้รับ materialized เช่นเดียวกับตารางปกติที่มีดัชนีและจะได้รับประโยชน์ในทำนองเดียวกันจากดัชนีที่สร้างขึ้น ค่าใช้จ่ายในการสร้างดัชนีนั้นเล็กน้อยเมื่อเทียบกับค่าใช้จ่ายในการดำเนินการสืบค้นโดยไม่มีดัชนี
@ypercube ชี้ให้เห็น MariaDB 5.3 ได้เพิ่มประสิทธิภาพการเพิ่มประสิทธิภาพเดียวกัน บทความนี้มีภาพรวมที่น่าสนใจของกระบวนการ:
การปรับให้เหมาะสมจะถูกนำไปใช้แล้วตารางที่ได้รับไม่สามารถรวมเข้ากับการเลือกหลักซึ่งเกิดขึ้นเมื่อตารางที่ได้รับไม่ตรงตามเกณฑ์สำหรับ VIEW ที่ผสาน