คำถามติดแท็ก materialized-view

นิยามเหมือนมุมมอง แต่เก็บข้อมูลถาวรเช่นตาราง Materialized Views เป็นคุณลักษณะของ RDBMS จำนวนหนึ่งซึ่งรวมถึง Oracle, DB2 และ postgres SQL Server มีคุณลักษณะที่คล้ายกันที่เรียกว่า Indexed View ซึ่งถือว่าคล้ายกันมากพอที่จะอยู่ภายใต้แท็กนี้

7
การเขียนโครงสร้างธนาคารอย่างง่าย: ฉันจะรักษายอดคงเหลือของฉันให้สอดคล้องกับประวัติการทำธุรกรรมได้อย่างไร
ฉันกำลังเขียนคีสำหรับฐานข้อมูลธนาคารที่เรียบง่าย นี่คือคุณสมบัติพื้นฐาน: ฐานข้อมูลจะเก็บธุรกรรมกับผู้ใช้และสกุลเงิน ผู้ใช้ทุกคนมียอดดุลหนึ่งรายการต่อหนึ่งสกุลเงินดังนั้นแต่ละยอดดุลเป็นเพียงผลรวมของธุรกรรมทั้งหมดต่อผู้ใช้และสกุลเงิน ยอดคงเหลือต้องไม่ติดลบ แอปพลิเคชันธนาคารจะสื่อสารกับฐานข้อมูลผ่านขั้นตอนการจัดเก็บ ฉันคาดหวังว่าฐานข้อมูลนี้จะยอมรับการทำธุรกรรมใหม่หลายแสนรายการต่อวันรวมทั้งคำสั่งยอดคงเหลือในลำดับความสำคัญที่สูงขึ้น ในการให้บริการยอดคงเหลืออย่างรวดเร็วฉันต้องรวมไว้ล่วงหน้า ในเวลาเดียวกันฉันต้องรับประกันว่ายอดเงินจะไม่ขัดแย้งกับประวัติการทำธุรกรรม ตัวเลือกของฉันคือ: มีbalancesตารางแยกต่างหากและทำสิ่งใดสิ่งหนึ่งต่อไปนี้: ใช้ธุรกรรมกับทั้งtransactionsและbalancesตาราง ใช้TRANSACTIONตรรกะในเลเยอร์ของโพรซีเดอร์ที่เก็บไว้เพื่อให้แน่ใจว่ายอดคงเหลือและการทำธุรกรรมมีการซิงค์อยู่เสมอ (รองรับโดยแจ็ค ) ใช้ธุรกรรมกับtransactionsตารางและมีทริกเกอร์ที่อัปเดตbalancesตารางให้ฉันด้วยจำนวนธุรกรรม ใช้ธุรกรรมกับbalancesตารางและมีทริกเกอร์ที่เพิ่มรายการใหม่ในtransactionsตารางให้ฉันด้วยจำนวนธุรกรรม ฉันต้องพึ่งพาวิธีการรักษาความปลอดภัยเพื่อให้แน่ใจว่าไม่มีการเปลี่ยนแปลงใด ๆ นอกกระบวนการที่เก็บไว้ มิฉะนั้นตัวอย่างเช่นกระบวนการบางอย่างสามารถแทรกธุรกรรมลงในtransactionsตารางโดยตรงและภายใต้โครงการ1.3ยอดคงเหลือที่เกี่ยวข้องจะไม่ซิงค์กัน มีbalancesมุมมองที่จัดทำดัชนีที่รวมการทำธุรกรรมอย่างเหมาะสม เครื่องมือเก็บข้อมูลรับประกันยอดคงเหลือเพื่อให้สอดคล้องกับการทำธุรกรรมของพวกเขาดังนั้นฉันไม่จำเป็นต้องพึ่งพาวิธีการรักษาความปลอดภัยเพื่อรับประกันสิ่งนี้ ในทางกลับกันฉันไม่สามารถบังคับยอดคงเหลือให้เป็นค่าที่ไม่เป็นลบได้อีกต่อไปนับตั้งแต่การดู - แม้แต่การดูที่มีการจัดทำดัชนี - ไม่สามารถมีCHECKข้อ จำกัด ได้ (สนับสนุนโดยDenny ) มีเพียงtransactionsตารางแต่มีคอลัมน์เพิ่มเติมเพื่อจัดเก็บยอดคงเหลือที่มีประสิทธิภาพหลังจากทำรายการนั้นแล้ว ดังนั้นบันทึกธุรกรรมล่าสุดสำหรับผู้ใช้และสกุลเงินจึงมียอดดุลปัจจุบัน (แนะนำโดยAndrewด้านล่าง; ตัวแปรที่เสนอโดยgarik ) ครั้งแรกที่ผมจัดการปัญหานี้ผมอ่านเหล่านี้ สอง2การอภิปรายและการตัดสินใจในตัวเลือก สำหรับการอ้างอิงคุณสามารถดูการดำเนินงานที่เปลือยกระดูกของมันนี่ คุณออกแบบหรือจัดการฐานข้อมูลเช่นนี้ด้วยโปรไฟล์การโหลดสูงหรือไม่ คุณมีวิธีแก้ไขปัญหานี้อย่างไร คุณคิดว่าฉันได้เลือกการออกแบบที่ถูกต้องหรือไม่? มีอะไรบ้างที่ฉันควรจำไว้? ตัวอย่างเช่นฉันรู้ว่าการเปลี่ยนสคีมาในtransactionsตารางจะต้องมีการสร้างbalancesมุมมองใหม่ แม้ว่าฉันจะเก็บถาวรธุรกรรมเพื่อทำให้ฐานข้อมูลมีขนาดเล็ก (เช่นย้ายไปที่อื่นและแทนที่ด้วยธุรกรรมสรุป) การสร้างมุมมองใหม่จากการทำธุรกรรมหลายสิบล้านครั้งด้วยการปรับปรุง schema ทุกครั้งอาจหมายถึงการหยุดทำงานต่อการปรับใช้ …

1
คุณสร้างมุมมองด้วย SNAPSHOT_MATERIALIZATION ใน SQL Server 2017 ได้อย่างไร
SQL Server 2017 มีขั้นตอนการจัดเก็บใหม่สองสามขั้นตอน: sp_refresh_single_snapshot_view - พารามิเตอร์การป้อนข้อมูลสำหรับ @view_name nvarchar (261), @rgCode int sp_refresh_snapshot_views - พารามิเตอร์ขาเข้าสำหรับ @rgCode int และรายการใหม่ใน sys.messages: 10149 - ดัชนีที่มี SNAPSHOT_MATERIALIZATION ไม่สามารถสร้างได้ในมุมมอง '%. * ls' เนื่องจากคำจำกัดความการดูประกอบด้วยตารางที่ปรับให้เหมาะสมกับหน่วยความจำ 10642 - SNAPSHOT_MATERIALIZATION ไม่สามารถตั้งค่าสำหรับดัชนี '%. * ls' บน '%. * ls' เนื่องจากใช้กับดัชนีในมุมมองเท่านั้น 10643 - SNAPSHOT_MATERIALIZATION ไม่สามารถตั้งค่าสำหรับ '%. * ls' บน '%. * …

2
รีเฟรชมุมมอง materalized ที่เพิ่มขึ้นใน PostgreSQL
เป็นไปได้ไหมที่จะรีเฟรชมุมมองที่เป็นรูปธรรมเพิ่มขึ้นใน PostgreSQL เช่นสำหรับข้อมูลที่ใหม่หรือมีการเปลี่ยนแปลงเท่านั้น พิจารณาตารางนี้และมุมมองที่ปรากฏขึ้น: CREATE TABLE graph ( xaxis integer NOT NULL, value integer NOT NULL, ); CREATE MATERIALIZED VIEW graph_avg AS SELECT xaxis, AVG(value) FROM graph GROUP BY xaxis มีการเพิ่มค่าใหม่เป็นระยะgraphหรือปรับปรุงค่าที่มีอยู่เป็นระยะ ฉันต้องการรีเฟรชมุมมองgraph_avgทุกสองสามชั่วโมงเฉพาะค่าที่อัปเดต อย่างไรก็ตามใน PostgreSQL 9.3 ตารางทั้งหมดจะถูกรีเฟรช ใช้เวลาค่อนข้างนาน เวอร์ชันถัดไป 9.4 อนุญาตให้CONCURRENTอัพเดต แต่ยังคงรีเฟรชมุมมองทั้งหมด ด้วยจำนวนแถว 100 ล้านแถวซึ่งใช้เวลาไม่กี่นาที เป็นวิธีที่ดีในการติดตามการปรับปรุงและค่าใหม่และฟื้นฟูมุมมองเพียงบางส่วนเท่านั้น?

2
ใช้มุมมองที่จัดทำดัชนีไว้สำหรับการรวม - ดีเกินจริงหรือ?
เรามีคลังข้อมูลที่มีจำนวนเรกคอร์ดที่ค่อนข้างใหญ่ (10-20 ล้านแถว) และมักเรียกใช้คิวรีที่นับเร็กคอร์ดระหว่างวันที่แน่นอนหรือนับจำนวนเรกคอร์ดด้วยค่าสถานะที่แน่นอนเช่น SELECT f.IsFoo, COUNT(*) AS WidgetCount FROM Widgets AS w JOIN Flags AS f ON f.FlagId = w.FlagId WHERE w.Date >= @startDate GROUP BY f.IsFoo ประสิทธิภาพไม่น่ากลัว แต่อาจค่อนข้างเชื่องช้า (อาจใช้เวลา 10 วินาทีในแคชเย็น) เมื่อเร็ว ๆ นี้ฉันค้นพบว่าฉันสามารถใช้GROUP BYในมุมมองที่จัดทำดัชนีและลองใช้บางสิ่งที่คล้ายกับต่อไปนี้ CREATE VIEW TestView WITH SCHEMABINDING AS SELECT Date, FlagId, COUNT_BIG(*) AS WidgetCount FROM …

3
แทนที่มุมมองที่ปรากฏใน Postgres
ฉันมีมุมมองที่เป็นรูปธรรมPostgres 9.3ซึ่งฉันต้องการอัปเดตด้วยคอลัมน์ใหม่ อย่างไรก็ตามมุมมองที่ปรากฏอื่น ๆ ยังขึ้นอยู่กับมุมมองนี้และข้อความแสดงข้อผิดพลาดระบุว่าไม่สามารถวางมุมมองได้เมื่อวัตถุอื่นขึ้นอยู่กับมุมมองนี้ ข้อผิดพลาด: ไม่สามารถวางมุมมอง materialized ล่าสุด latest_charges ได้เนื่องจากวัตถุอื่นขึ้นอยู่กับมัน นอกจากนี้ยังปรากฏจากเอกสารที่ว่าคำหลัก REPLACE ไม่ถูกต้องสำหรับมุมมองที่ปรากฏ มีทางลัดนอกเหนือจากการปล่อยวัตถุที่ต้องพึ่งพาทั้งหมดแล้วสร้างใหม่แต่ละรายการหรือไม่

3
ค้นหาคำจำกัดความของมุมมองที่ปรากฏใน Postgres
ฉันสงสัยว่าจะค้นหาคำจำกัดความของมุมมองที่ปรากฏใน Postgres ได้อย่างไร สำหรับการอ้างอิงสิ่งที่ฉันหวังว่าจะทำนั้นคล้ายกับสิ่งที่คุณสามารถทำได้สำหรับมุมมองปกติ: SELECT * FROM information_schema.views WHERE table_name = 'some_view'; ซึ่งให้คอลัมน์ต่อไปนี้แก่คุณ: table_catalog table_schema table_name view_definition check_option is_updatable is_insertable_into is_trigger_updatable is_trigger_deletable is_trigger_insertable_into สิ่งนี้เป็นไปได้หรือไม่สำหรับมุมมองที่ปรากฏขึ้น จากการวิจัยของฉันจนถึงขณะนี้ปรากฏว่ามุมมองที่เป็นรูปธรรมได้รับการยกเว้นโดยเจตนาจาก information_schema เพราะ information_schema สามารถแสดงวัตถุที่มีอยู่ในมาตรฐาน SQL เท่านั้น ( http://www.postgresql.org/message-id/3794.1412980686@sss.pgh.pa.us ) เนื่องจากดูเหมือนว่าพวกเขาจะถูกแยกออกจาก information_schema ทั้งหมดฉันไม่แน่ใจว่าจะทำอย่างไร แต่สิ่งที่ฉันต้องการทำคือทวีคูณ: สอบถามว่ามีมุมมองที่ปรากฏขึ้นโดยเฉพาะหรือไม่ (จนถึงตอนนี้วิธีเดียวที่ฉันพบว่าทำคือลองสร้างมุมมอง mat ด้วยชื่อเดียวกันและดูว่ามันระเบิดขึ้นหรือไม่) จากนั้นสอบถามคำจำกัดความของมุมมองที่ปรากฏขึ้น (คล้ายกับview_definitionคอลัมน์บนinformation_schema.views)

1
ปัจจัยใดบ้างที่เข้าสู่ดัชนีแบบกลุ่มของดัชนีการดูที่ถูกเลือก?
โดยสังเขป ปัจจัยใดที่พวกเขาค้นหาการเลือกดัชนีของมุมมองที่จัดทำดัชนีไว้ของเครื่องมือเพิ่มประสิทธิภาพ สำหรับฉันการดูที่จัดทำดัชนีดูเหมือนจะท้าทายสิ่งที่ฉันเข้าใจเกี่ยวกับวิธีที่เครื่องมือเพิ่มประสิทธิภาพเลือกดัชนี ฉันเคยเห็นสิ่งนี้ถามมาก่อนแต่ OP ไม่ได้รับการตอบรับดีเกินไป ฉันกำลังมองหาป้ายบอกทางแต่ฉันจะปรุงตัวอย่างหลอกแล้วโพสต์ตัวอย่างจริงด้วย DDL, เอาท์พุท, ตัวอย่างมากมาย สมมติว่าฉันใช้ Enterprise 2008+ เข้าใจ with(noexpand) ตัวอย่างหลอก ใช้ตัวอย่างปลอมนี้: ฉันสร้างมุมมองที่มี 22 ตัวกรองตัวกรอง 17 ตัวและม้าวงเวียนที่ตัดแถวตารางจำนวน 10 ล้านแถว มุมมองนี้มีราคาแพง (ใช่ด้วยทุน E) ที่จะทำให้เป็นจริง ฉันจะวางแผนและสร้างดัชนีมุมมอง SELECT a,b FROM AnIndexedView WHERE theClusterKeyField < 84จากนั้น ในตรรกะของเครื่องมือเพิ่มประสิทธิภาพที่ทำให้ฉันมีการเชื่อมต่อที่ขีดเส้นใต้ ผลลัพธ์: ไม่มีคำแนะนำ: 4825 อ่าน 720 แถว 47 cpu มากกว่า 76ms และราคาต้นไม้ย่อยโดยประมาณ 0.30523 …

3
วิธีที่ดีที่สุดในการสร้างมุมมองที่ปรากฏใน MySQL
ฉันใช้ MySQL 5.6 ฉันไม่สามารถสร้างมุมมองที่เป็นตัวเป็นตนเหมือนที่ทำได้ใน Oracle ฉันเห็นโซลูชันหนึ่งหรือสองอย่างเช่น Flexview ใครช่วยบอกวิธีที่ดีที่สุดในการสร้างมุมมองที่เป็นรูปธรรมใน MySQL (รีเฟรชอัตโนมัติเช่นเดียวกับใน Oracle) ด้วยความซับซ้อนขั้นต่ำได้หรือไม่

1
การแก้ไขการหยุดชะงักจาก 2 ตารางเกี่ยวข้องเฉพาะผ่านมุมมองที่จัดทำดัชนี
ฉันมีสถานการณ์ที่กำลังหยุดชะงักและฉันคิดว่าฉัน จำกัด ผู้กระทำผิด แต่ฉันไม่แน่ใจว่าฉันจะทำอะไรได้บ้างเพื่อแก้ไข นี่คือสภาพแวดล้อมการผลิตที่ใช้ SQL Server 2008 R2 เพื่อให้คุณเข้าใจสถานการณ์ได้ง่ายขึ้น: ฉันมี 3 ตารางตามที่กำหนดไว้ด้านล่าง: TABLE activity ( id, -- PK ... ) TABLE member_activity ( member_id, -- PK col 1 activity_id, -- PK col 2 ... ) TABLE follow ( id, -- PK follower_id, member_id, ... ) member_activityตารางมีสารประกอบหลักสำคัญกำหนดเป็นmember_id, activity_idเพราะฉันเท่านั้นที่เคยต้องดูข้อมูลในตารางที่ว่าวิธีการ ฉันยังมีดัชนี nonclustered …

1
Postgres: ตรวจสอบพื้นที่ดิสก์ที่ถ่ายโดยมุมมอง materialized?
ฉันรู้วิธีตรวจสอบขนาดของดัชนีและตารางใน Postgres (ฉันใช้เวอร์ชัน 9.4): SELECT relname AS objectname, relkind AS objecttype, reltuples AS "#entries", pg_size_pretty(relpages::bigint*8*1024) AS size FROM pg_class WHERE relpages >= 8 ORDER BY relpages DESC; แต่สิ่งนี้จะไม่แสดงมุมมองที่ปรากฏ ฉันจะตรวจสอบจำนวนเนื้อที่ดิสก์ที่ใช้ไปได้อย่างไร

2
DBCC CHECKDB ความเสียหายที่ไม่สามารถแก้ไขได้: มุมมองที่จัดทำดัชนีมีแถวที่ไม่ได้สร้างขึ้นโดยการกำหนดมุมมอง
TL; DR: ฉันมีความเสียหายที่ไม่สามารถแก้ไขได้ในมุมมองที่จัดทำดัชนี นี่คือรายละเอียด: วิ่ง DBCC CHECKDB([DbName]) WITH EXTENDED_LOGICAL_CHECKS, DATA_PURITY, NO_INFOMSGS, ALL_ERRORMSGS บนหนึ่งในฐานข้อมูลของฉันสร้างข้อผิดพลาดต่อไปนี้: เกี่ยวกับข่าวสาร 8907 ระดับ 16 สถานะ 1 บรรทัด 1 ดัชนีเชิงพื้นที่ดัชนี XML หรือมุมมองที่จัดทำดัชนี 'ViewName' (ID วัตถุ 784109934) ประกอบด้วยแถวที่ไม่ได้สร้างขึ้นโดยการกำหนดมุมมอง สิ่งนี้ไม่จำเป็นต้องแสดงถึงปัญหาด้านความสมบูรณ์ของข้อมูลในฐานข้อมูลนี้ ( ... ) CHECKDB พบข้อผิดพลาดในการจัดสรร 0 ข้อและข้อผิดพลาดความสอดคล้อง 1 ข้อในตาราง 'ViewName' repair_rebuild เป็นระดับการซ่อมแซมขั้นต่ำ (... ) ฉันเข้าใจว่าข้อความนี้บ่งชี้ว่าข้อมูลที่เป็นรูปธรรมของมุมมองที่จัดทำดัชนี 'ViewName' ไม่เหมือนกับสิ่งที่สร้างข้อความค้นหาต้นแบบ อย่างไรก็ตามการตรวจสอบข้อมูลด้วยตนเองไม่ได้ทำให้เกิดความคลาดเคลื่อน: SELECT * …

3
จะเกิดอะไรขึ้นหากทั้งสองกระบวนการพยายามที่จะดูข้อมูลอ้างอิงใหม่อย่างต่อเนื่องในเวลาเดียวกัน
ตามเอกสาร: รีเฟรชมุมมองที่เป็นรูปธรรมอย่างไม่หยุดยั้งโดยไม่ล็อคออกพร้อมกันเลือกบนมุมมองที่ปรากฏ ( ... ) ... เนื้อหาอื่น ๆ ... แม้จะมีตัวเลือกนี้REFRESH ครั้งละหนึ่งอาจทำงานกับ มุมมองที่ปรากฏขึ้นใด ๆ ฉันมีฟังก์ชั่นที่ตรวจสอบเวลารีเฟรชครั้งล่าสุดสำหรับ VIEW MATERIALIZED และถ้าผ่านไป 60 วินาทีมันจะรีเฟรช อย่างไรก็ตามจะเกิดอะไรขึ้นหากฉันพยายามรีเฟรชมุมมองที่เป็นรูปธรรมจากกระบวนการที่แยกกันสองกระบวนการในเวลาเดียวกัน พวกเขาจะจัดคิวหรือจะเพิ่มข้อผิดพลาดหรือไม่ มีวิธีการตรวจจับหรือไม่เมื่อมุมมองแบบ MATERIALIZED กำลังถูกรีเฟรชและหลีกเลี่ยงการสัมผัส ขณะนี้ฉันได้ทำการเติมข้อมูลในตารางก่อนที่จะรีเฟรช (ตั้งค่าrefreshingเป็นtrue) จากนั้นตั้งค่าเป็นfalseเมื่อกระบวนการเสร็จสิ้น EXECUTE 'INSERT INTO refresh_status (last_update, refreshing) VALUES (clock_timestamp(), true) RETURNING id') INTO refresh_id; EXECUTE 'REFRESH MATERIALIZED VIEW CONCURRENTLY my_mat_view'; EXECUTE 'UPDATE refresh_status SET …

2
ความเสี่ยงในการเปลี่ยนเป็น ARITHABORT ON
ฉันทำงานกับผู้จัดจำหน่ายด้วยข้อตกลงที่พวกเขาให้แอปพลิเคชันหลักและฉันสามารถสร้างส่วนขยายของตัวเองได้ตราบใดที่ฉันไม่ได้แก้ไขแอปพลิเคชันหลัก มันสร้างขึ้นใน ColdFusion เชื่อมต่อกับฐานข้อมูล SQL Server 2005 บางรายงานที่ฉันสร้างขึ้นนั้นขึ้นอยู่กับมุมมองโดยใช้ฟังก์ชั่นที่คำนวณจากตารางหลักและรายงานเริ่มช้ามากเมื่อตารางใหญ่ขึ้น เพื่อเพิ่มความเร็วในรายงานที่ฉันต้องการที่จะใช้มุมมองการจัดทำดัชนี แต่หลังจากสร้างมุมมองที่จัดทำดัชนีไว้ในสภาพแวดล้อมการทดสอบของฉันแล้วแอปพลิเคชันหลักไม่สามารถแทรกลงในตารางหลักได้อีกต่อไป (ซึ่งจะส่งกลับข้อผิดพลาดที่ARITHABORTจำเป็นต้องONใช้เมื่อใช้มุมมองที่จัดทำดัชนี) ดังนั้นดูเหมือนว่าเพื่อที่จะใช้มุมมองที่มีการจัดทำดัชนีฉันต้องมีแอปพลิเคชันหลักSET ARITHABORT ONทุกครั้งที่แทรก / ปรับปรุงตารางหลัก ฉันวิ่งในสภาพแวดล้อมการทดสอบของฉัน: ALTER DATABASE MyDatabase SET ARITHABORT ON; และดูเหมือนว่าจะทำงานได้ดี แต่ผู้ขายของฉันบอกว่าเนื่องจากแอปพลิเคชันมีการค้นหาหลายพันครั้งอาจมีความเสี่ยงที่การตั้งค่านี้อาจทำลายหนึ่งในการค้นหาเหล่านี้และหากเรามีปัญหาฐานข้อมูลที่ไม่คาดคิดในอนาคตพวกเขาจะยืนยันว่าจะคืนค่าเริ่มต้น มีคำถามที่เกิดขึ้นจริงที่จะถูกทำลายโดยSET ARITHABORT ON? มีสถานการณ์ใดบ้างที่จะรักษาไว้ได้ดีกว่าOFF? TL; DR สำหรับมุมมองที่จัดทำดัชนีใหม่ของฉันเพื่อการทำงานฉันต้องตั้งค่าARITHABORT ONฐานข้อมูลทั้งหมด แต่ผู้ขายของฉันเตือนว่ามันจะเป็นความเสี่ยงของตัวเอง มีความเสี่ยงหรือไม่?

2
เหตุใดมุมมองที่จัดทำดัชนีจึงไม่อนุญาตดัชนีที่ไม่ซ้ำกันแบบคลัสเตอร์
ฉันได้พิจารณาใช้การจัดทำดัชนีการดูเพื่อเพิ่มประสิทธิภาพในการดูที่ใช้บ่อยที่สุดของเรา อย่างไรก็ตามมุมมองที่จัดทำดัชนีไม่สนับสนุนดัชนีคลัสเตอร์ที่ไม่ซ้ำกันซึ่งไปเล็กน้อยกับความสำคัญที่กำหนดโดยส่วนที่เหลือของโครงสร้างฐานข้อมูล ตัวอย่างเช่นที่นี่เป็นเวอร์ชันที่เรียบง่ายของตารางของเราสองสามตัว -Groups- Group ID GroupName -Users- UserKey UserName FullName GroupID ดัชนีอยู่ใน Groups.GroupID (ไม่ทำคลัสเตอร์) และ Users.GroupID (ทำคลัสเตอร์) คีย์คลัสเตอร์ที่อยู่ใน GroupID ในตารางผู้ใช้เป็นช่วงที่ผู้ใช้จากกลุ่มที่เฉพาะเจาะจงมากที่สุดจะถูกดึง เห็นได้ชัดว่าคุณจะมีผู้ใช้หลายคนต่อกลุ่มดังนั้นดัชนีคลัสเตอร์นี้จะไม่ซ้ำกัน สิ่งนี้ทำให้ฉันมีความไม่แน่นอนเล็กน้อยเกี่ยวกับวิธีทำตามความสำคัญนี้เมื่อจัดทำดัชนีมุมมองของฉันเช่นตัวอย่างนี้เนื่องจากฉันไม่สามารถมีดัชนีคลัสเตอร์ที่ไม่ซ้ำกันได้ ConsumableID ConsumableVariantID AllowThresholdOverwrite FullPath GroupID ManufacturerID Type ModelID 101 29 1 0.1.2.4. 4 3 3 2 ในความเป็นจริงแล้วมีเพียงค่าเดียวในมุมมองนี้ซึ่งจะเป็นค่าที่ไม่ซ้ำกันคือคอลัมน์ ConsumableID ดังนั้นฉันจึงเหลือตัวเลือกเพียงเล็กน้อยว่าจะวางดัชนีของฉันไว้ที่ใด เหตุใด Views จึงไม่อนุญาตให้มีดัชนีที่ไม่ซ้ำกันในกลุ่มเมื่อตารางปกติทำ

2
จัดทำดัชนีมุมมองใน SQL Server
ฉันมีตารางและมุมมองที่จัดทำดัชนีไว้เหมือนกัน Create table mytable1 (ID int identity(1,1), Name nvarchar(100)) Create table mytable2 (ID int identity(1,1), Name nvarchar(100)) Create view myview with schemabinding as select a.name, b.name from mytable1 a join mytable2 b on a.Id = b.Id ตอนนี้ถ้าฉันเรียกใช้แบบสอบถามต่อไปนี้ select a.name, b.name from mytable1 a join mytable2 b on a.Id = b.Id …

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