ฉันกำลังจะออกแบบ DW และฉันได้ยินเกี่ยวกับมุมมองที่เป็นรูปธรรม อันที่จริงฉันต้องการสร้างมุมมองและควรอัปเดตโดยอัตโนมัติเมื่อมีการเปลี่ยนแปลงตารางพื้นฐาน ใครช่วยอธิบายด้วยตัวอย่างแบบสอบถาม ..
ฉันกำลังจะออกแบบ DW และฉันได้ยินเกี่ยวกับมุมมองที่เป็นรูปธรรม อันที่จริงฉันต้องการสร้างมุมมองและควรอัปเดตโดยอัตโนมัติเมื่อมีการเปลี่ยนแปลงตารางพื้นฐาน ใครช่วยอธิบายด้วยตัวอย่างแบบสอบถาม ..
คำตอบ:
เรียกว่ามุมมองที่จัดทำดัชนีใน SQL Server - อ่านเอกสารไวท์เปเปอร์เหล่านี้เพื่อดูข้อมูลเพิ่มเติม:
โดยพื้นฐานแล้วสิ่งที่คุณต้องทำคือ:
และเสร็จแล้ว!
ส่วนที่ยุ่งยากคือ: มุมมองต้องตอบสนองข้อ จำกัด และข้อ จำกัด หลายประการซึ่งมีระบุไว้ในเอกสารไวท์เปเปอร์ ถ้าคุณทำเช่นนี้นั่นคือทั้งหมดที่มี กำลังอัปเดตมุมมองโดยอัตโนมัติไม่จำเป็นต้องบำรุงรักษา
แหล่งข้อมูลเพิ่มเติม:
แม้ว่าจะมาจากมุมมองทางวิศวกรรม แต่มุมมองที่จัดทำดัชนีดูเหมือนจะเป็นสิ่งที่ทุกคนสามารถใช้เพื่อปรับปรุงประสิทธิภาพได้ แต่สถานการณ์ในชีวิตจริงนั้นแตกต่างกันมาก ฉันไม่ประสบความสำเร็จโดยใช้มุมมองที่จัดทำดัชนีซึ่งฉันต้องการมากที่สุดเนื่องจากมีข้อ จำกัด มากเกินไปเกี่ยวกับสิ่งที่สามารถจัดทำดัชนีได้และสิ่งที่ทำไม่ได้
หากคุณมีการรวมภายนอกในมุมมองจะไม่สามารถใช้งานได้ นอกจากนี้ไม่อนุญาตให้ใช้นิพจน์ตารางทั่วไป ... ในความเป็นจริงหากคุณมีลำดับใด ๆ ในการเลือกย่อยหรือตารางที่ได้รับ (เช่นมีพาร์ติชันตามข้อ) คุณก็โชคไม่ดีเช่นกัน
นั่นทำให้เหลือเพียงสถานการณ์ที่เรียบง่ายมากในการใช้มุมมองที่จัดทำดัชนีบางสิ่งในความคิดของฉันสามารถปรับให้เหมาะสมได้โดยการสร้างดัชนีที่เหมาะสมบนตารางพื้นฐาน
ฉันจะตื่นเต้นที่จะได้ยินสถานการณ์ในชีวิตจริงที่ผู้คนใช้มุมมองที่จัดทำดัชนีเพื่อประโยชน์ของพวกเขาและไม่สามารถทำได้หากไม่มีพวกเขา
(NOEXPAND)
คำใบ้ให้กับแบบสอบถามที่ใช้มุมมองที่จัดทำดัชนี แล้วคุณจะสังเกตเห็นความแตกต่าง ข้อดีของการใช้มุมมองที่จัดทำดัชนีเทียบกับ "การจัดทำดัชนีตารางอย่างถูกต้อง" คือการ จำกัด การเลือกระเบียนมิฉะนั้นคุณจะถูกต้องก็จะเหมือนกัน
คุณอาจต้องการพื้นหลังเพิ่มเติมเล็กน้อยเกี่ยวกับมุมมองที่เป็นรูปธรรม ใน Oracle สิ่งเหล่านี้คือออบเจ็กต์ที่ประกอบด้วยองค์ประกอบจำนวนมากเมื่อคุณพยายามสร้างขึ้นที่อื่น
MVIEW เป็นภาพรวมของข้อมูลจากแหล่งอื่น ซึ่งแตกต่างจากมุมมองที่ไม่พบข้อมูลเมื่อคุณสอบถามมุมมองที่จัดเก็บในรูปแบบตาราง MVIEW จะถูกรีเฟรชโดยใช้ขั้นตอนเบื้องหลังที่เริ่มต้นในช่วงเวลาปกติหรือเมื่อข้อมูลต้นทางเปลี่ยนแปลง Oracle อนุญาตให้มีการรีเฟรชทั้งหมดหรือบางส่วน
ใน SQL Server ฉันจะใช้สิ่งต่อไปนี้เพื่อสร้าง MVIEW พื้นฐานเพื่อ (เสร็จสมบูรณ์) รีเฟรชเป็นประจำ
ประการแรกมุมมอง สิ่งนี้ควรเป็นเรื่องง่ายสำหรับคนส่วนใหญ่เนื่องจากมุมมองเป็นเรื่องธรรมดาในฐานข้อมูลใด ๆ ถัดไปตาราง ควรจะเหมือนกับมุมมองในคอลัมน์และข้อมูล การดำเนินการนี้จะจัดเก็บสแนปชอตของข้อมูลมุมมอง จากนั้นโพรซีเดอร์ที่ตัดทอนตารางและโหลดซ้ำตามข้อมูลปัจจุบันในมุมมอง สุดท้ายงานที่ทริกเกอร์โพรซีเดอร์เพื่อเริ่มทำงาน
อย่างอื่นคือการทดลอง
เมื่อมุมมองที่จัดทำดัชนีไม่ใช่ตัวเลือกและไม่จำเป็นต้องมีการอัปเดตด่วนคุณสามารถสร้างตารางแฮ็คแคช:
select * into cachetablename from myviewname
alter table cachetablename add primary key (columns)
-- OR alter table cachetablename add rid bigint identity primary key
create index...
จากนั้น sp_rename view / table หรือเปลี่ยนเคียวรีหรือมุมมองอื่น ๆ ที่อ้างอิงให้ชี้ไปที่ตารางแคช
กำหนดเวลาทุกวัน / ทุกคืน / รายสัปดาห์ / ไม่รีเฟรชเช่น
begin transaction
truncate table cachetablename
insert into cachetablename select * from viewname
commit transaction
หมายเหตุ: สิ่งนี้จะกินพื้นที่เช่นกันในบันทึก tx ของคุณ เหมาะที่สุดสำหรับชุดข้อมูลขนาดเล็กที่ประมวลผลช้า บางที refactor เพื่อกำจัดคอลัมน์ "ง่าย แต่มีขนาดใหญ่" ในมุมมองด้านนอกก่อน
สำหรับ MS T-SQL Server ฉันขอแนะนำให้สร้างดัชนีด้วยคำสั่ง "include" ไม่จำเป็นต้องมีความเป็นเอกลักษณ์และไม่มีการเรียงลำดับข้อมูลทางกายภาพที่เกี่ยวข้องกับดัชนีคลัสเตอร์ "ดัชนี ... รวม ()" สร้างที่จัดเก็บข้อมูลทางกายภาพแยกต่างหากที่ดูแลโดยระบบโดยอัตโนมัติ มีแนวคิดคล้ายกับ Oracle Materialized View มาก
https://msdn.microsoft.com/en-us/library/ms190806.aspx
https://technet.microsoft.com/en-us/library/ms189607(v=sql.105).aspx