..
โซลูชั่นแรกคือการใช้ร่วมในการสอบถามโดยตรงการเขียนดังต่อไปนี้
เลือก PC.LastName + '' PC.FirstName + [ชื่อลูกค้า]
, SC.CustomerType
จาก Sales.Customer เซาท์แคโรไลนา
ภายนอกด้านซ้าย Sales.Individual YES
ON = SC.CustomerID SI.CustomerID
ภายนอกด้านซ้ายพีซี Person.Contact JOIN
ON = SI.ContactID PC.ContactID
ในรุ่นที่สองนี้ผมก็ใช้ตารางในการทำงาน getName วางพวกเขาในส่วนคำสั่ง FROM ฉันยังแทนที่ getName การเรียกใช้ฟังก์ชันที่อยู่ในรายการของคอลัมน์ในคำสั่ง SELECT โดยการเชื่อมโยงโดยตรงทั้งสองคอลัมน์ในตารางที่ติดต่อ
นี่คือสิ่งที่ Profiler ที่แสดงให้เห็นการดำเนินการแบบสอบถามนี้

ในขณะที่คุณสามารถเห็นหน้าของการโทรจำนวนมากจากรุ่นก่อนหน้าของแบบสอบถามรุ่นใหม่ที่เป็นสายเดียวซึ่งแน่นอนหมายถึงการประหยัดขนาดใหญ่ในแง่ของประสิทธิภาพ
ตอนนี้ขอดูสิ่งที่เกิดขึ้นโดยการแปลงเกลา getName เดิมในการทำงานในฟังก์ชันที่ส่งกลับตารางแทน (ตารางแบบอินไลน์) ขั้นแรกให้สร้างฟังก์ชันและ denominiamola GetNameTable
สร้างฟังก์ชัน GetNameTable (@ ลูกค้า int) ตารางผลตอบแทน AS (กลับ เลือกนามสกุล +','+ FirstName [ชื่อลูกค้า] จาก Sales.Customer เซาท์แคโรไลนา ภายนอกด้านซ้าย Sales.Individual YES ON = SC.CustomerID SI.CustomerID ภายนอกด้านซ้ายพีซี Person.Contact JOIN ON = SI.ContactID PC.ContactID ที่ CustomerID = @ SC.CustomerID )
ที่คุณสามารถดูแบบสอบถามที่สารสกัดจากข้อมูลที่มีค่าเท่ากับที่ของ getName ฟังก์ชันสเกลาที่แตกต่างเพียงอย่างเดียวคือฟังก์ชันจะส่งกลับ GetNameTable ตารางแทนที่จะเป็นค่า varchar ที่จะใช้คุณลักษณะใหม่นี้เขาจะใช้เป็นสิ่งที่จำเป็นในการใช้ CROSS ที่ใช้ดำเนินการดังต่อไปนี้
เลือก I. [ชื่อลูกค้า]
, SC.CustomerType
จาก Sales.Customer เซาท์แคโรไลนา
CROSS สมัคร GetNameTable (SC.CustomerID)
ในกรณีนี้ผลจากการดังต่อไปนี้จะ Profiler

ลองมาตัวอย่างสุดท้ายของวิธีการเขียนแบบสอบถามต้นฉบับมีประสิทธิภาพมากขึ้น เวลานี้เราจะสร้างและใช้มุมมองดังต่อไปนี้
CREATE VIEW View_GetName
AS
เลือกนามสกุล +','+ FirstName [ชื่อลูกค้า]
, SC.CustomerID
จาก Sales.Customer เซาท์แคโรไลนา
เข้าร่วม Sales.Individual
ON = SC.CustomerID SI.CustomerID
เข้าร่วมพีซี Person.Contact
ON = SI.ContactID PC.ContactID
GO
ขึ้นอยู่กับมุมมองนี้เราสามารถเขียนแบบสอบถามของเราดังต่อไปนี้
[ชื่อลูกค้า] V. เลือก
, CustomerType
จาก Sales.Customer เซาท์แคโรไลนา
ภายนอกด้านซ้าย View_GetName V
เมื่อลูกค้า SC.CustomerID = R.
ในกรณีนี้ผลจากการ Profiler จะมีค่าเท่ากับว่าจากที่ก่อนหน้านี้สองตัวอย่าง เหล่านี้สามตัวอย่างมีค่าเท่ากันแม้จะนำเสนอความแตกต่างเล็ก ๆ ในประสิทธิภาพการทำงาน แนวทางที่มีประสิทธิภาพมากที่สุดเป็นข้ามเข้าร่วมผลในการใช้งาน CPU ลดลงเล็กน้อย (คุณสามารถดูจากข้อมูลของ Profiler)
ตัวอย่างเหล่านี้มีวัตถุประสงค์เพื่อเน้นว่าการใช้ฟังก์ชันสเกลาในรายการของคอลัมน์ในคำสั่ง SELECT หรือในส่วนคำสั่ง WHERE เป็นวิธีที่ไม่มีประสิทธิภาพ ผลกระทบของการปฏิบัตินี้เป็นสัดส่วนโดยตรงกับปริมาณของข้อมูลที่สกัดจากแบบสอบถามที่มีการใช้ เมื่อใช้ในวิธีนี้ฟังก์ชันสเกลาประพฤติเช่นเคอร์เซอร์ที่เรียกว่าซ้ำแล้วน้ำหนักลดลงการพัฒนาของคำแนะนำของเรา หากจึงนำมาใช้ในบางส่วนของคำสั่งของคุณถือว่าเป็นฟังก์ชันสเกลาที่จะเขียนเหมือนกันในหนึ่งในทางเลือกที่แนะนำ
ที่เห็นในบทความนี้เป็นเพียงบางส่วนของมาตรการที่เป็นไปได้เพื่อปรับปรุงประสิทธิภาพของคำสั่ง T - SQL ของเราและอุปกรณ์ที่มีประโยชน์อื่น ๆ ที่จะกล่าวถึงในบทความในอนาคต
| |
หลักสูตรใน MS Access
เรียนรู้วิธีการสร้างและจัดการฐานข้อมูลได้ง่ายและรวดเร็ว เริ่มต้นจาก 29 € |
| |
หลักสูตร MySQL
การบริหารจัดการฐานข้อมูลแบบ open - source เริ่มต้นจาก 39 € |
| |
ฐานข้อมูลหลักสูตรและ SQL
การสร้างและจัดการฐานข้อมูลเชิงสัมพันธ์ เริ่มต้นจาก 39 € |