SQL Server - การจัดการการแปลสตริงในที่ซ้อนกันแบบ non-deterministic
ในขณะทำโปรไฟล์ฐานข้อมูลฉันพบว่ามีการอ้างอิงฟังก์ชั่นที่ไม่ได้กำหนดค่าบางอย่างที่เข้าถึง1,000-2500 ครั้งต่อนาทีสำหรับการเชื่อมต่อแต่ละครั้งในแอพพลิเคชั่นนี้ วิSELECTจากมุมมองทำให้แผนการดำเนินการต่อไปนี้: ดูเหมือนว่าแผนซับซ้อนสำหรับมุมมองที่มีน้อยกว่าหนึ่งพันแถวที่อาจเห็นการเปลี่ยนแปลงหนึ่งหรือสองแถวทุกสองสามเดือน แต่มันก็แย่ลงด้วยการปฏิบัติอื่น ๆ ดังต่อไปนี้: มุมมองแบบซ้อนไม่สามารถกำหนดค่าได้ดังนั้นเราจึงไม่สามารถจัดทำดัชนีได้ แต่ละมุมมองอ้างอิงหลายUDFs เพื่อสร้างสตริง UDF แต่ละอันประกอบด้วยUDFs ที่ซ้อนกันเพื่อรับรหัส ISO สำหรับภาษาที่แปลเป็นภาษาท้องถิ่น ผู้ชมในกองกำลังใช้เพิ่มเติมสร้างสตริงกลับมาจากUDFการเป็นJOINภาค มุมมองสแต็กแต่ละครั้งจะถือว่าเป็นตารางหมายความว่ามีINSERT/ UPDATE/ DELETEทริกเกอร์ในแต่ละเพื่อเขียนไปยังตารางพื้นฐาน ทริกเกอร์เหล่านี้ในมุมมองใช้CURSORSว่าEXECวิธีการจัดเก็บที่อ้างอิงมากกว่านี้สตริงสร้างUDFs ดูเหมือนว่าฉันจะเน่าเสีย แต่ฉันมีประสบการณ์กับ TSQL เพียงไม่กี่ปี มันจะดีขึ้นเช่นกัน! ดูเหมือนนักพัฒนาที่ตัดสินใจว่านี่เป็นความคิดที่ยอดเยี่ยมทำทั้งหมดนี้เพื่อให้สตริงสองสามร้อยรายการที่เก็บไว้สามารถมีการแปลตามสตริงที่ส่งคืนจากสตริงUDFนั้นเป็นแบบเฉพาะสคีมา นี่คือหนึ่งในมุมมองในสแต็ก แต่ทั้งหมดนั้นไม่ดีเท่ากัน: CREATE VIEW [UserWKStringI18N] AS SELECT b.WKType, b.WKIndex , CASE WHEN ISNULL(il.I18NID, N'') = N'' THEN id.I18NString ELSE il.I18nString END AS WKString ,CASE …