มีข้อดีที่จะไม่แบ่งพาร์ติชันให้สอดคล้องกับดัชนีหรือไม่?


9

ฉันมีสิทธิ์จัดการตาราง OLAP ที่แบ่งพาร์ติชันขนาดใหญ่ ในขณะที่ตรวจสอบตารางนี้ฉันสังเกตเห็นว่าดัชนีตัวใดตัวหนึ่งไม่ตรงกับชุดรูปแบบการแบ่งพาร์ติชัน เนื่องจากผู้เขียนไม่พร้อมใช้งานและการค้นหาของ Google ที่สร้างขึ้นอย่างระมัดระวังจึงไม่ส่งคืนผลลัพธ์ที่เป็นประโยชน์ใด ๆ ฉันไม่แน่ใจว่าสิ่งนี้เป็นไปโดยเจตนาหรือไม่ตั้งใจ

มีเหตุผลใดที่จะไม่จัดพาร์ติชันดัชนีใน SQL Server 2008?


1
อาจ สอบถามการใช้สถิติดัชนีของคุณเพื่อดูว่ามีการใช้ดัชนีนั้นหรือไม่ หากเป็นเช่นนั้นให้ใช้เหตุการณ์ที่ขยายออกไปหรือการติดตามฝั่งเซิร์ฟเวอร์เพื่อจับภาพสิ่งที่กดปุ่มดัชนีนั้น หากพวกเขาจะทำงานได้ดีขึ้นในดัชนีการจัดตำแหน่งพาร์ทิชันที่ดี ถ้าไม่ตรวจสอบเพื่อดูว่าพวกเขาต้องการดัชนีแบ่งพาร์ติชันที่ไม่สอดคล้องกันหรือไม่ ถ้าไม่เช่นนั้นฉันจะบอกว่าทำให้พาร์ทิชันจัดตำแหน่งต่อไปเนื่องจากการสืบค้นในอนาคตสามารถใช้ประโยชน์จากมันได้ แน่นอนถ้าค่าใช้จ่าย / ความพยายาม / ไฟดับสูงเกินไปก็ไม่ควร
Ali Razeghi

จากสิ่งที่ฉันได้อ่านแนวปฏิบัติที่ดีที่สุดสำหรับการทำดัชนีตารางที่แบ่งพาร์ติชันคือการจัดเรียงดัชนีกับรูปแบบการแบ่งพาร์ติชัน ตารางนี้ทำให้ฉันคิดว่าฉันต้องการที่จะเข้าใจกรณีการใช้งานเพื่อไม่จัดดัชนีกับรูปแบบพาร์ทิชัน ฉันไม่ได้พยายามที่จะแก้ปัญหาเฉพาะเจาะจงดังนั้นฉันจึงไม่มีแบบสอบถามที่ต้องวิเคราะห์
Robin

เหตุผลอีกประการในการออกแบบดัชนีที่ไม่จัดเป็นดัชนีที่ไม่ซ้ำกัน (รวมถึงคีย์หลักหรือข้อ จำกัด ที่ไม่ซ้ำกัน) ซึ่งไม่รวมคอลัมน์การแบ่งพาร์ติชัน ในกรณีนี้ดัชนีจะต้องไม่แบ่งพาร์ติชันเลยหรือแบ่งพาร์ติชันโดยใช้ฟังก์ชั่น / รูปแบบที่แตกต่างกัน
Dan Guzman

คำตอบ:


11

ประโยชน์หลักของการไม่แบ่งพาร์ทิชัน (ไม่ใช่ไม่ซ้ำกัน) ดัชนีบนวัตถุฐานแบ่งพาร์ติชันก็คือการทำงานรอบยาวนานข้อ จำกัด เพิ่มประสิทธิภาพการค้นหาที่เกี่ยวข้องกับการร้องขอข้อมูลที่ได้รับคำสั่งเช่นMIN, MAXหรือTOP (n)คำสั่ง

ในดัชนีแบ่งพาร์ติชันเพิ่มประสิทธิภาพโดยทั่วไปไม่สามารถแปลMIN, MAXหรือTOP (n)การดำเนินการเดียวกันต่อพาร์ทิชันตามด้วยการรวมโลกรอบสุดท้ายในช่วงต่อพาร์ทิชันมวลบางส่วน เครื่องมือเพิ่มประสิทธิภาพเลือกแผนการดำเนินการที่สแกนพาร์ติชันทั้งหมดของดัชนีแทน ข้อยกเว้นนี้เป็นกรณีเดียวที่ระบุการดำเนินการรวมหรือด้านบนไว้เหนือคอลัมน์การแบ่งพาร์ติชัน

ฉันควรพูดถึงว่ามีเหตุผลที่ดีมากที่จะไม่มีดัชนีที่ไม่จัดแนว การเลือกใช้ดัชนีที่ไม่จัดแนวจะต้องเป็นตัวเลือกที่มีข้อมูลมาก ฉันเคยทำด้วยตัวเอง (ไม่ค่อย) ในอดีต แต่ในสถานการณ์ที่เฉพาะเจาะจงมาก ๆ ซึ่งประโยชน์ที่ได้นั้นมีมากกว่าค่าใช้จ่ายอย่างชัดเจนหรือไม่มีทางเลือกอื่นที่สมเหตุสมผล


บทความโดย Itzik Ben-Ganอธิบายปัญหา


3

มีปัญหาที่ชัดเจนเกี่ยวกับข้อ จำกัด บางประการ (เช่นไม่ซ้ำกัน) ซึ่งต้องการดัชนีที่ไม่จัดแนว

อื่น ๆ กว่าที่ดัชนีที่ไม่สอดคล้องมีขนาดใหญ่ค่าใช้จ่าย (ส่วนใหญ่พวกเขาป้องกันไม่ให้ผู้ประกอบการหลายขนานจากไปด้ายต่อพาร์ทิชันและทางเลือกที่มีหน่วยความจำแพง) และทำให้ฉันจะขอให้คำแนะนำกับดัชนีดังกล่าว แม้จะมีคดีต่าง ๆ ที่ระบุโดย Paul ฉันยังคงแนะนำให้ใช้ดัชนีที่ไม่จัดแนว


1
ใช่. การเลือกดัชนีที่ไม่จัดชิดจะต้องเป็นทางเลือกที่รู้แจ้งมาก ฉันเคยทำด้วยตัวเอง (ไม่ค่อย) ในอดีต แต่ในสถานการณ์ที่เฉพาะเจาะจงมาก ๆ ที่ผลประโยชน์มีมากกว่าค่าใช้จ่าย
Paul White 9

2

ดัชนีที่ไม่จัดแนวจะปฏิเสธประโยชน์หลักของการแบ่งพาร์ติชันซึ่งเป็นการสลับพาร์ติชั่น หากคุณไม่ได้ขึ้นอยู่กับสิ่งนั้นและกำลังทำการแบ่งพาร์ติชั่นด้วยเหตุผลอื่น (ที่เก็บข้อมูลที่แตกต่างกัน, พาร์ติชั่นแบบอ่านอย่างเดียว, สถิติส่วนเพิ่ม, ... ) จากนั้นไปข้างหน้าและสร้าง indexex ที่ไม่จัดแนว

ดัชนีที่ไม่จัดแนวนั้นมีประโยชน์เพราะคุณสามารถบังคับใช้ข้อ จำกัด ที่ไม่ซ้ำกันในตารางทั้งหมดได้ นอกจากนี้ดัชนีที่ไม่ได้จัดแนวนั้นไม่จำเป็นต้องใช้คีย์การแบ่งพาร์ติชันเพื่อเป็นการค้นหาคำนำหน้าโดยนัย ลองนึกภาพว่ามี 10,000 พาร์ติชั่นและการค้นหาไม่ขึ้นอยู่กับคีย์การแบ่งพาร์ติชัน แผนการดำเนินการนั้นจะต้องค้นหาเป็นพาร์ติชัน 10000 ถ้าดัชนีถูกจัดตำแหน่ง คำตอบอื่น ๆ มีตัวอย่างเพิ่มเติม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.