เหตุใดความสัมพันธ์จึงมีความสำคัญในการใช้งาน SQL

ในหนังสือที่ฉันกำลังอ่าน (การสืบค้น SQL Server 2012) ผู้เขียนพูดถึงทฤษฎีการทำงานของฐานข้อมูล เขากล่าวถึงความสัมพันธ์ คุณลักษณะ และสิ่งอันดับ ฯลฯ

เขามักเน้นย้ำถึงความจริงที่ว่าบางแง่มุมของ T-SQL นั้นไม่เกี่ยวข้องกัน เช่นเดียวกับข้อความที่ตัดตอนมาต่อไปนี้:

ต่างจากเฟสก่อนหน้านี้ที่ผลลัพธ์มีความสัมพันธ์กัน ผลลัพธ์ของเฟสนี้ไม่สัมพันธ์กันเนื่องจากมีลำดับที่แน่นอน ผลลัพธ์ของระยะนี้คือสิ่งที่ SQL มาตรฐานเรียกว่าเคอร์เซอร์ โปรดทราบว่าการใช้คำว่าเคอร์เซอร์ในที่นี้เป็นแนวคิด T-SQL ยังรองรับวัตถุที่เรียกว่าเคอร์เซอร์ซึ่งถูกกำหนดตามผลลัพธ์ของการสืบค้น และอนุญาตให้ดึงข้อมูลทีละแถวตามลำดับที่ระบุ คุณอาจสนใจที่จะส่งคืนผลลัพธ์ของแบบสอบถามตามลำดับเฉพาะเพื่อวัตถุประสงค์ในการนำเสนอ หรือหากผู้เรียกจำเป็นต้องใช้ผลลัพธ์ในลักษณะนั้นผ่านกลไกเคอร์เซอร์บางตัวที่ดึงข้อมูลแถวทีละแถว แต่โปรดจำไว้ว่าการประมวลผลดังกล่าวไม่เกี่ยวข้องกัน หากคุณต้องการประมวลผลผลลัพธ์การสืบค้นในลักษณะเชิงสัมพันธ์ เช่น กำหนดนิพจน์ตาราง เช่น มุมมองที่ยึดตามการสืบค้น (รายละเอียดในบทที่ 4) ผลลัพธ์จะต้องเชิงสัมพันธ์ นอกจากนี้ การเรียงลำดับข้อมูลยังอาจเพิ่มต้นทุนให้กับการประมวลผลแบบสอบถามอีกด้วย หากคุณไม่สนใจลำดับที่ส่งคืนแถวผลลัพธ์ คุณสามารถหลีกเลี่ยงค่าใช้จ่ายที่ไม่จำเป็นนี้ได้โดยไม่เพิ่มส่วนคำสั่ง ORDER BY

ฉันต้องการทราบว่าเนื่องจากการใช้งาน SQL ทุกครั้งจะมีส่วนคำสั่ง ORDER BY ซึ่งทำให้มันไม่เกี่ยวข้อง เหตุใดจึงสำคัญ ว่า (ชุดหลัง ORDER BY ถูกใช้) มันไม่เกี่ยวข้องอีกต่อไปเนื่องจาก มันเป็นแบบนั้นทุกที่เหรอ?

ฉันเข้าใจได้ถ้าเขาบอกว่ามันไม่มาตรฐาน เช่น ใช้ != แทน <> สำหรับความไม่เท่าเทียมกันเพราะมันส่งผลต่อความสามารถในการพกพา ฯลฯ แต่ฉันไม่เข้าใจว่าทำไมบางสิ่งถึงดีกว่าถ้ามีความสัมพันธ์กัน

กรุณาให้ความกระจ่าง


person sprocket12    schedule 08.11.2013    source แหล่งที่มา


คำตอบ (2)


ดูเหมือนว่าผู้เขียนกำลังหมายถึงการใช้ทฤษฎีเซต (ซึ่งอยู่ในคำว่า "เชิงสัมพันธ์") กับการประมวลผลทีละแถวด้วยเคอร์เซอร์หรือวิธีการที่คล้ายกัน การเข้าถึงข้อมูลในลักษณะเชิงสัมพันธ์ช่วยให้กลไกฐานข้อมูลดำเนินการเลือก/รวม/เรียงลำดับ/สั่งซื้อ/อื่นๆ ได้ บนชุดข้อมูลทั้งหมดโดยที่เคอร์เซอร์จะประมวลผลครั้งละหนึ่งแถวเท่านั้น เท่าที่ฉันรู้ การเพิ่มส่วนคำสั่ง ORDER BY ไม่ได้สร้างการสืบค้นที่ "ไม่เกี่ยวข้อง" ผู้เขียนเพียงสังเกตว่าหากคุณไม่สนใจลำดับของชุดผลลัพธ์ คุณสามารถปล่อยส่วนคำสั่งนั้นออกจากการสืบค้นของคุณและ โปรแกรมฐานข้อมูลจะส่งคืนข้อมูลตามลำดับใดก็ตามที่สิ้นสุดการประมวลผล

นอกจากนี้ โปรดทราบว่าส่วนคำสั่ง ORDER BY เป็นส่วนสุดท้ายที่กลไกฐานข้อมูลจะดำเนินการ ซึ่งหมายความว่าแบบสอบถามได้รับการประมวลผลในลักษณะ "เชิงสัมพันธ์" จากนั้นจึงจัดลำดับในนาทีสุดท้าย เคอร์เซอร์จะเริ่มต้นที่บันทึกแรกและเลื่อนผ่านทีละรายการ ดังนั้นการดำเนินการทั้งหมดจึงดำเนินการตามลำดับที่กำหนดไว้ล่วงหน้าตามคำจำกัดความของเคอร์เซอร์/คิวรีของคุณ

person Troy Carlson    schedule 08.11.2013
comment
และเคอร์เซอร์และการประมวลผลแบบแถวต่อแถวจะช้ากว่าการดำเนินการตามการตั้งค่ามาก - person HLGEM; 08.11.2013
comment
ผู้เขียนกำลังบอกว่า ORDER BY ทำให้มันไม่สัมพันธ์กัน เขาได้กล่าวถึงเรื่องนี้หลายครั้ง ดูเหมือนว่าจากความคิดเห็นของ HLGEM ข้างต้น เหตุผลที่ผู้เขียนพูดถึงอยู่เรื่อยๆ อาจเป็นเพราะเขาต้องการให้ผู้อ่านแยกแยะความแตกต่างและเข้าใจความหมายของประสิทธิภาพในภายหลัง - person sprocket12; 08.11.2013
comment
MuhammadA นั้นถูกต้องและเป็นเช่นนั้น - ORDER BY กำหนดผลลัพธ์ที่ไม่เกี่ยวข้องอย่างแน่นอน - person randmatt; 09.11.2013
comment
มันไร้สาระ สมมติว่าสำหรับความบังเอิญครั้งใหญ่ โปรแกรมสืบค้นส่งคืนตารางที่เรียงลำดับไว้แล้ว นี่จะเป็นเชิงสัมพันธ์ แต่ถ้าคุณถามอย่างชัดเจนถึงการเรียงลำดับดังกล่าว (การได้ผลลัพธ์ เดียวกัน) มันก็จะไม่เกี่ยวข้องกันอีกต่อไป มันไม่สมเหตุสมผลเลย หากลำดับของแถวไม่เกี่ยวข้องในโมเดลเชิงสัมพันธ์ ทำไมการมีลำดับเฉพาะจึงทำให้มันไม่สัมพันธ์กัน โปรดช่วยฉันเข้าใจ - person Michele; 19.03.2014

จุดของการสืบค้นเชิงสัมพันธ์ใน (การสืบค้น SQL Server 2012) คือ:

โดยจะส่งคืนชุดที่ตอบสนองความต้องการในการสืบค้น

แต่ลำดับของวิธีการนำเสนอผลลัพธ์นั้นไม่สามารถกำหนดได้ ซึ่งหมายความว่ามันไม่แน่นอนและอาจเปลี่ยนแปลงได้สำหรับฐานข้อมูลเดียวกัน ขึ้นอยู่กับกลไกกระบวนการพื้นฐาน

ORDER BY ทำให้กำหนดได้ ดังนั้นการเรียกใช้แบบสอบถามเดียวกันบนเซิร์ฟเวอร์ที่แตกต่างกันจึงรับประกันลำดับผลลัพธ์ที่เหมือนกัน

ดังนั้นด้วยวิธีนี้ ลำดับจึงสามารถเหมือนกันก่อนและหลังส่วนคำสั่ง ORDER BY ที่ถูกเพิ่มเข้าไป แต่ไม่ได้กำหนดให้ว่าจะเท่ากัน (เช่น สำหรับแพตช์ที่แตกต่างกัน)

person Karl Lundin    schedule 26.12.2019