เนื่องจากข้อกำหนดของคุณว่าคุณกำลังเลือกคอลัมน์ทั้งหมดมีความแตกต่างเล็กน้อย ในขณะนี้ อย่างไรก็ตามจงตระหนักว่าสกีมาฐานข้อมูลนั้นเปลี่ยนแปลง หากคุณใช้SELECT *
คุณจะได้รับคอลัมน์ใหม่เพิ่มลงในตารางแม้ว่าในทุกโอกาสรหัสของคุณไม่ได้เตรียมที่จะใช้หรือนำเสนอข้อมูลใหม่ที่ ซึ่งหมายความว่าคุณกำลังเปิดเผยระบบของคุณถึงการเปลี่ยนแปลงประสิทธิภาพและการทำงานที่ไม่คาดคิด
คุณอาจเต็มใจที่จะยกเลิกสิ่งนี้เป็นค่าใช้จ่ายเล็กน้อย แต่ทราบว่าคอลัมน์ที่คุณไม่ต้องการยังคงต้อง:
- อ่านจากฐานข้อมูล
- ส่งข้ามเครือข่าย
- มาร์แชลเข้าสู่กระบวนการของคุณ
- (สำหรับเทคโนโลยีประเภท ADO) บันทึกในหน่วยความจำภายในตารางข้อมูล
- ถูกละทิ้งและทิ้ง / เก็บขยะ
ไอเท็ม # 1 มีค่าใช้จ่ายแอบแฝงมากมายรวมถึงการกำจัดดัชนีที่ซ่อนเร้นทำให้การโหลดหน้าข้อมูล (และการแคชแคชของเซิร์ฟเวอร์) การล็อกแถว / หน้า / ตารางที่อาจเกิดขึ้นซึ่งอาจหลีกเลี่ยงได้
ยอดคงเหลือนี้เทียบกับการประหยัดที่เป็นไปได้ของการระบุคอลัมน์เมื่อเทียบกับ*
และการประหยัดที่เป็นไปได้เท่านั้น:
- โปรแกรมเมอร์ไม่จำเป็นต้องกลับไปที่ SQL เพื่อเพิ่มคอลัมน์
- การขนส่งผ่านเครือข่ายของ SQL นั้นเล็กลง / เร็วขึ้น
- เวลาในการแยกวิเคราะห์ / การตรวจสอบแบบสอบถาม SQL Server
- แคชแผนแบบสอบถาม SQL Server
สำหรับรายการที่ 1 ความจริงก็คือคุณจะต้องเพิ่ม / เปลี่ยนรหัสเพื่อใช้คอลัมน์ใหม่ที่คุณอาจเพิ่มอยู่แล้วดังนั้นจึงเป็นการล้าง
สำหรับรายการที่ 2 ความแตกต่างนั้นแทบจะไม่พอที่จะผลักคุณไปสู่ขนาดแพ็กเก็ตหรือจำนวนแพ็กเก็ตเครือข่ายอื่น หากคุณไปถึงจุดที่เวลาในการส่งคำสั่ง SQL เป็นปัญหาที่สำคัญคุณอาจต้องลดอัตราของคำสั่งก่อน
สำหรับรายการที่ 3 ไม่มีการออมเนื่องจากการขยายตัวของสิ่งที่*
ต้องเกิดขึ้นต่อไปซึ่งหมายถึงการให้คำปรึกษากับตาราง schema อยู่ดี ในความเป็นจริงการแสดงรายการคอลัมน์จะต้องเสียค่าใช้จ่ายเท่ากันเพราะจะต้องมีการตรวจสอบกับสคีมา กล่าวอีกนัยหนึ่งนี่เป็นการล้างที่สมบูรณ์
สำหรับรายการที่ 4 เมื่อคุณระบุคอลัมน์เฉพาะแคชแผนแบบสอบถามของคุณจะได้รับมีขนาดใหญ่ แต่เพียงถ้าคุณจะจัดการกับชุดที่แตกต่างของคอลัมน์ (ซึ่งไม่ใช่สิ่งที่คุณได้ระบุ) ในกรณีนี้คุณต้องการรายการแคชที่แตกต่างกันเพราะคุณต้องการแผนที่แตกต่างกันตามความจำเป็น
ดังนั้นทั้งหมดนี้เกิดขึ้นเนื่องจากวิธีการที่คุณระบุคำถามเพื่อความยืดหยุ่นของปัญหาเมื่อเผชิญกับการปรับเปลี่ยนสคีมาในที่สุด หากคุณกำลังเขียน schema นี้ลงใน ROM (เกิดขึ้น) แสดงว่า*
ยอมรับได้อย่างสมบูรณ์
อย่างไรก็ตามหลักเกณฑ์ทั่วไปของฉันคือคุณควรเลือกคอลัมน์ที่คุณต้องการเท่านั้นซึ่งหมายความว่าบางครั้งมันจะดูเหมือนว่าคุณกำลังขอทั้งหมด แต่ DBA และวิวัฒนาการ schema หมายความว่าคอลัมน์ใหม่บางอย่างอาจปรากฏที่อาจส่งผลกระทบต่อแบบสอบถามอย่างมาก .
คำแนะนำของฉันคือคุณควรเลือกคอลัมน์เฉพาะเสมอ จำไว้ว่าคุณเก่งในเรื่องที่ทำไปเรื่อย ๆ ดังนั้นจงทำตัวให้ถูกต้อง
หากคุณสงสัยว่าทำไมสคีมาอาจเปลี่ยนแปลงได้โดยไม่ต้องเปลี่ยนรหัสให้คิดในแง่ของการบันทึกการตรวจสอบวันที่ที่มีผล / หมดอายุและสิ่งอื่น ๆ ที่คล้ายกันซึ่ง DBAs เพิ่มเข้ามาสำหรับปัญหาด้านความสอดคล้อง แหล่งที่มาของการเปลี่ยนแปลงอื่น ๆ ที่อยู่ภายใต้การดูแลคือ denormalizations สำหรับประสิทธิภาพการทำงานที่อื่นในระบบหรือเขตข้อมูลที่ผู้ใช้กำหนด