..


ลิงก์ผู้สนับสนุน

เพิ่มประสิทธิภาพการทำงานของ T - SQL สคริปต์ใน SQL Server

บทความที่เขียนโดย Vincenzo Gaglio
หน้า 4 จาก 4

โซลูชั่นแรกคือการใช้ร่วมในการสอบถามโดยตรงการเขียนดังต่อไปนี้






 เลือก 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 ของเราและอุปกรณ์ที่มีประโยชน์อื่น ๆ ที่จะกล่าวถึงในบทความในอนาคต

ในประเภทเดียวกัน ...
E - Learning
หลักสูตรใน MS Access หลักสูตรใน MS Access
เรียนรู้วิธีการสร้างและจัดการฐานข้อมูลได้ง่ายและรวดเร็ว เริ่มต้นจาก 29 €
หลักสูตร MySQL หลักสูตร MySQL
การบริหารจัดการฐานข้อมูลแบบ open - source เริ่มต้นจาก 39 €
ฐานข้อมูลหลักสูตรและ SQL ฐานข้อมูลหลักสูตรและ SQL
การสร้างและจัดการฐานข้อมูลเชิงสัมพันธ์ เริ่มต้นจาก 39 €
ลิงก์ผู้สนับสนุน