ฉันคิดว่าฐานข้อมูลจะรู้มากพอเกี่ยวกับสิ่งที่พวกเขาพบบ่อยและสามารถตอบสนองต่อความต้องการที่อยู่ภายใต้การที่พวกเขาสามารถตัดสินใจที่จะเพิ่มดัชนีลงในข้อมูลที่มีการร้องขอสูง
UNIQUE
ข้อ จำกัด
ฉันคิดว่าฐานข้อมูลจะรู้มากพอเกี่ยวกับสิ่งที่พวกเขาพบบ่อยและสามารถตอบสนองต่อความต้องการที่อยู่ภายใต้การที่พวกเขาสามารถตัดสินใจที่จะเพิ่มดัชนีลงในข้อมูลที่มีการร้องขอสูง
UNIQUE
ข้อ จำกัด
คำตอบ:
ปรับปรุง
สิ่งนี้นำมาใช้ใน SQL Server Azure มันสร้างคำแนะนำ
และการจัดการดัชนีสามารถกำหนดค่าให้โดยอัตโนมัติ
เปิดใช้งานการจัดการดัชนีอัตโนมัติ
คุณสามารถตั้งค่าที่ปรึกษาฐานข้อมูล SQL ให้ใช้คำแนะนำได้โดยอัตโนมัติ เมื่อคำแนะนำพร้อมใช้งานจะมีการนำไปใช้โดยอัตโนมัติ เช่นเดียวกับการดำเนินการดัชนีทั้งหมดที่จัดการโดยบริการหากผลกระทบต่อประสิทธิภาพเป็นลบคำแนะนำจะถูกเปลี่ยนกลับ
คำตอบเดิม
ฐานข้อมูลบางตัวสร้างดัชนีอยู่แล้วโดยอัตโนมัติ
ใน SQL Server บางครั้งแผนการดำเนินการสามารถรวมตัวดำเนินการดัชนีสปูลซึ่ง RDBMS จะสร้างสำเนาของข้อมูลแบบดัชนี อย่างไรก็ตามสปูลนี้ไม่ได้เป็นส่วนถาวรของฐานข้อมูลที่เก็บไว้ในซิงค์กับแหล่งข้อมูลและไม่สามารถใช้ร่วมกันระหว่างการดำเนินการค้นหาความหมายการดำเนินการตามแผนดังกล่าวอาจสิ้นสุดลงซ้ำ ๆ การสร้างและวางดัชนีชั่วคราวบนข้อมูลเดียวกัน
บางทีในอนาคต RDBMSs จะมีความสามารถในการปล่อยแบบไดนามิกและสร้างดัชนีถาวรตามปริมาณงาน
กระบวนการปรับให้เหมาะสมดัชนีอยู่ในท้ายที่สุดเพียงแค่การวิเคราะห์ผลประโยชน์ต้นทุน ในขณะที่มันเป็นความจริงที่มนุษย์อาจมีข้อมูลเพิ่มเติมเกี่ยวกับความสำคัญสัมพัทธ์ของการสืบค้นในปริมาณงานในหลักการไม่มีเหตุผลว่าทำไมข้อมูลนี้ถึงไม่สามารถใช้งานได้กับเครื่องมือเพิ่มประสิทธิภาพ SQL Server มีผู้ว่าการทรัพยากรที่อนุญาตให้แบ่งเซสชันออกเป็นกลุ่มเวิร์กโหลดที่แตกต่างกันแล้วโดยมีการจัดสรรทรัพยากรที่แตกต่างกันตามลำดับความสำคัญ
DMVs ที่หายไปของดัชนีที่กล่าวถึงโดย Kenneth ไม่ได้มีวัตถุประสงค์ที่จะนำมาใช้อย่างสุ่มสี่สุ่มห้าเนื่องจากพวกเขาพิจารณาถึงประโยชน์ของการสืบค้นเฉพาะเท่านั้นและไม่พยายามที่จะคำนึงถึงต้นทุนของดัชนีที่อาจเกิดขึ้นกับการสืบค้นอื่น ๆ และไม่รวมดัชนีที่ขาดหายไปเช่นเดียวกัน เช่นผลลัพธ์ของ DMV นี้อาจรายงานดัชนีที่หายไปA,B,C
และA,B INCLUDE(C)
ปัญหาปัจจุบันบางอย่างที่มีความคิดคือ
อาจเป็นไปได้อย่างสมเหตุสมผลที่จะคาดหวังความถูกต้องของแบบจำลองการคิดต้นทุนเพื่อปรับปรุงเมื่อเวลาผ่านไป แต่จุดที่ 2 ดูมีเล่ห์เหลี่ยมในการแก้ปัญหาและจุดที่ 3 นั้นไม่ละลายโดยเนื้อแท้
อย่างไรก็ตามการติดตั้งส่วนใหญ่อาจไม่ได้อยู่ในสถานการณ์ที่เงียบสงบนี้กับเจ้าหน้าที่ที่มีทักษะซึ่งติดตามตรวจสอบวินิจฉัยและคาดการณ์การเปลี่ยนแปลง (หรืออย่างน้อยตอบสนองต่อ) การเปลี่ยนแปลงในปริมาณงานอย่างต่อเนื่อง
โครงการ AutoAdminที่ Microsoft Research ได้รับการทำงานตั้งแต่ปี 1996
เป้าหมายของโครงการนี้คือการทำให้ฐานข้อมูลปรับแต่งเองและจัดการด้วยตนเองโดยใช้ประโยชน์จากความรู้เกี่ยวกับปริมาณงาน
โฮมเพจของโครงการแสดงรายการโครงการที่น่าสนใจหลายโครงการ คำถามหนึ่งเกี่ยวข้องกับคำถามที่นี่โดยเฉพาะ
ปัญหาที่น่าสนใจอีกประการหนึ่งเกิดขึ้นเมื่อไม่มี DBA (เช่นฐานข้อมูลแบบฝังหรือธุรกิจขนาดเล็ก) ในสถานการณ์เช่นนี้วิธีการปรับดัชนีแบบต่อเนื่องแบบสัมผัสที่ต่ำอาจมีความสำคัญ เราได้สำรวจวิธีแก้ไขปัญหา ... [ใน]“ แนวทางออนไลน์สู่การปรับแต่งการออกแบบทางกายภาพ ” ใน ICDE 2007
รัฐผู้เขียน
ด้วยคุณสมบัติ DBMS ทั่วไปที่เพิ่มมากขึ้นเช่นดัชนีออนไลน์มันเป็นเรื่องน่าดึงดูดที่จะสำรวจวิธีการแก้ปัญหาการออกแบบทางกายภาพโดยอัตโนมัติที่จะช่วยยกระดับความทันสมัย
กระดาษแนะนำอัลกอริทึม
ลักษณะสำคัญคือ:
- เมื่อการค้นหาได้รับการปรับให้เหมาะสมเราจะระบุชุดดัชนีที่เกี่ยวข้องที่จะปรับปรุงประสิทธิภาพ คุณลักษณะนี้ช่วยให้การประมวลผลแบบสอบถามดำเนินการต่อแบบขนานกับดัชนีที่สร้างขึ้นในพื้นหลัง
- ณ เวลาที่ดำเนินการเราจะติดตามผลประโยชน์ที่อาจเกิดขึ้นที่เราสูญเสียโดยไม่มีดัชนีตัวเลือกดังกล่าวและยังเป็นประโยชน์ของดัชนีที่มีอยู่ในการปรากฏตัวของแบบสอบถามการปรับปรุงและข้อ จำกัด ของพื้นที่
- หลังจากที่เรารวบรวม“ หลักฐาน” เพียงพอว่าการเปลี่ยนแปลงการออกแบบทางกายภาพนั้นมีประโยชน์เราก็จะทำการสร้างดัชนีหรือลบโดยอัตโนมัติ
- ลักษณะทางออนไลน์ของปัญหาของเราบ่งบอกว่าโดยทั่วไปแล้วเราจะล้าหลังโซลูชันที่ดีที่สุดที่รู้อนาคต อย่างไรก็ตามด้วยการวัดหลักฐานอย่างรอบคอบเรามั่นใจว่าเราจะไม่ประสบกับการตัดสินใจ“ ล่าช้า” อย่างมีนัยสำคัญดังนั้นจึง จำกัด จำนวนของการสูญเสียที่เกิดขึ้น
การใช้อัลกอริทึมช่วยให้สามารถควบคุมปริมาณการตอบสนองต่อการเปลี่ยนแปลงในการโหลดเซิร์ฟเวอร์และยังสามารถยกเลิกการสร้างดัชนีหากในระหว่างการสร้างการเปลี่ยนแปลงภาระงานและผลประโยชน์ที่คาดว่าจะต่ำกว่าจุดที่ถือว่าคุ้มค่า
บทสรุปของผู้เขียนในหัวข้อของOnline กับการปรับทางกายภาพแบบดั้งเดิม
อัลกอริธึมออนไลน์ในงานนี้มีประโยชน์เมื่อ DBA ไม่แน่ใจเกี่ยวกับพฤติกรรมในอนาคตของภาระงานหรือไม่มีความเป็นไปได้ที่จะทำการวิเคราะห์หรือสร้างแบบจำลองที่ครอบคลุม หาก DBA มีข้อมูลทั้งหมดเกี่ยวกับคุณสมบัติภาระงานการวิเคราะห์และการปรับใช้แบบคงที่โดยเครื่องมือที่มีอยู่ (เช่น [2, 3]) จะเป็นทางเลือกที่ดีกว่า
ข้อสรุปที่นี่มีความคล้ายคลึงกับในการปรับแต่งการสืบค้นดัชนีโดยใช้แบบสอบถามแบบอิสระ
วิธีการของเราไม่สามารถเอาชนะที่ปรึกษาดัชนีได้หากทราบปริมาณงานทั้งหมดล่วงหน้า อย่างไรก็ตามในสภาพแวดล้อมแบบไดนามิกที่มีการพัฒนาและการเปลี่ยนภาระงานวิธีการที่ขับเคลื่อนด้วยแบบสอบถามให้ผลลัพธ์ที่ดีกว่า
การออกแบบดัชนีที่คุณวางไว้เป็นอะไรที่มากกว่าศิลปะอย่างวิทยาศาสตร์ RDBMS ไม่ฉลาดพอที่จะใช้ปริมาณงานทั่วไปและออกแบบกลยุทธ์การจัดทำดัชนีอัจฉริยะ มันขึ้นอยู่กับการแทรกแซงของมนุษย์ (อ่าน: DBA) เพื่อวิเคราะห์ปริมาณงานและกำหนดว่าอะไรคือวิธีที่ดีที่สุด
หากไม่มีบทลงโทษสำหรับการจัดทำดัชนีมันจะเป็นวิธีการของปืนลูกซองที่จะเพิ่มจำนวนอนันต์ของดัชนี แต่เนื่องจากการปรับเปลี่ยนข้อมูล (INSERTS, UPDATES และ DELETES) ส่งผลกระทบต่อดัชนีที่เปิดใช้งานบนตารางดังนั้นจะมีค่าใช้จ่ายของตัวแปรเหล่านี้ของดัชนีเหล่านี้
ใช้การออกแบบและกลยุทธ์ของมนุษย์เพื่อสร้างดัชนีอย่างชาญฉลาดซึ่งจะเพิ่มประสิทธิภาพการอ่านสูงสุดในขณะที่มีค่าใช้จ่ายในการแก้ไขข้อมูลน้อยที่สุด
ในความเป็นจริงมีฐานข้อมูลบางอย่างที่ทำเช่นนี้ ยกตัวอย่างเช่นของ Google BigTableและของ Amazon SimpleDBโดยอัตโนมัติสร้างดัชนี(แม้ว่าจะไม่เป็น RDBMS ของ) นอกจากนี้ยังมีเอ็นจินMySQL RDBMS อย่างน้อยหนึ่งตัวที่ทำสิ่งนี้ SQL Server ยังติดตามดัชนีที่คิดว่าคุณควรสร้างแม้ว่ามันจะไม่ไปไกลเท่าที่สร้างขึ้นจริง
ปัญหาที่เกิดขึ้นเป็นเรื่องยากที่น่าแปลกใจที่จะได้รับที่ถูกต้องดังนั้นจึงไม่น่าแปลกใจว่าฐานข้อมูลส่วนใหญ่ไม่ได้โดยอัตโนมัติสร้างพวกเขาไม่มี(BigTable / SimpleDB รับไปกับมันเพราะพวกเขาไม่อนุญาตให้พลร่วมซึ่งจะทำให้สิ่งที่ง่ายขึ้นอย่างมีนัยสำคัญ) นอกจากนี้การสร้างดัชนีได้ทันทีเป็นกระบวนการที่ใช้เวลานานซึ่งต้องมีการเข้าถึงแบบเอกสิทธิ์เฉพาะบุคคลในตารางทั้งหมด - ไม่ใช่สิ่งที่คุณต้องการเกิดขึ้นอย่างแน่นอนในขณะที่ตารางออนไลน์
อย่างไรก็ตามด้วยจำนวนแอปพลิเคชันเว็บ LAMP ที่เขียนโดยมือสมัครเล่นที่ไม่ทราบว่าดัชนีคืออะไรฉันยังคงคิดว่าคุณลักษณะนี้จะเป็นประโยชน์สำหรับบางคน
rdbms
และฉันไม่คิดว่า BigTable ตกอยู่ในหมวดหมู่
ในขณะที่มีคำตอบมากมายแล้วพวกเขาดูเหมือนจะตอบคำถามจริง: ดัชนีไม่เป็นที่ต้องการเสมอไป
ด้วยการเปรียบเทียบรถที่กล่าวถึงในความคิดเห็นคุณจะดีกว่าที่จะพูดว่าทำไมรถทุกคันไม่พอดีกับแพ็คเกจกีฬาสุดขีด? ส่วนหนึ่งเป็นค่าใช้จ่าย แต่ก็ลงไปที่ความจริงที่ว่าผู้คนจำนวนมากไม่ต้องการหรือต้องการยางที่มีรายละเอียดต่ำ มันอึดอัดไม่จำเป็น
ดังนั้นคุณอาจมี 1,000 อ่านทุกครั้งที่มีการแทรกทำไมไม่มีดัชนีที่สร้างขึ้นอัตโนมัติ? หากตารางกว้างและแบบสอบถามต่าง ๆ ทำไมไม่มีหลาย บางทีความมุ่งมั่นเป็นช่วงเวลาที่สำคัญและการอ่านไม่ได้; ในสถานการณ์ที่อาจเป็นที่ยอมรับไม่ได้ที่จะชะลอการแทรกของคุณ บางทีคุณกำลังทำงานกับพื้นที่ดิสก์ที่ จำกัด และคุณไม่สามารถที่จะมีดัชนีเพิ่มเติมที่กินเข้าไปในพื้นที่ที่คุณมี
ประเด็นคือดัชนีไม่ได้ถูกสร้างขึ้นโดยอัตโนมัติเพราะไม่ใช่คำตอบสำหรับทุกสิ่ง การออกแบบดัชนีไม่ได้เป็นเพียงแค่การพูดว่า "เฮ้นี่จะเพิ่มความเร็วในการอ่านของฉัน" แต่ก็มีปัจจัยอื่น ๆ ที่ต้องพิจารณา
พวกเขาสามารถวิเคราะห์ข้อความค้นหาที่ผ่านมาและแนะนำ / สร้างดัชนีอย่างไรก็ตามสิ่งนี้ไม่ได้ผลอย่างเหมาะสมเพราะดัชนีเกิดความสมดุลเพื่อเร่งสิ่งที่คุณต้องการเพิ่มประสิทธิภาพด้วยต้นทุนและเซิร์ฟเวอร์ไม่สามารถรู้เจตนาของคุณได้
พวกเขาไม่ฉลาดพวกเขาเป็นส่วนหนึ่งของรหัส ทุกครั้งที่คุณป้อนข้อมูลใหม่ไปยังฐานข้อมูลนั้นจำเป็นต้องค้นหาตำแหน่งใหม่และแผนที่เพื่อค้นหาเมื่อมีการร้องขอ การจัดทำดัชนีฟังดูง่ายกว่าที่เป็นอยู่คุณแค่ให้หมายเลขใหม่แก่กลุ่มข้อมูลใหม่หรือไม่? แล้วถ้าแบบสอบถามต่อไปไม่เกี่ยวกับอันสุดท้ายของข้อมูล แต่ประมาณ 36271 ชิ้นก่อนหน้า? คุณสามารถค้นหามันด้วยดัชนีของคุณใช่ไหม? แต่ถ้าแบบสอบถามมีคำเช่น "การตกปลา" ที่จะพบในก้อนเก่า 36271 ที่ทำในปี 1997 โฮ? ไม่ใช่คำเกี่ยวกับการตกปลาในบทความเก่า
หากข้อมูลมาถึงฐานข้อมูลทีละรายการข้อมูลนั้นอาจถูกจัดทำดัชนีเช่นนั้น แต่การจัดทำดัชนีอย่างง่ายจะทำให้คุณได้รับผลลัพธ์ที่ผิดและ / หรือประสิทธิภาพช้าไม่ช้าก็เร็ว ...