Register
Member Login
Forgot Password ??
PHP
,
ASP
,
ASP.NET, VB.NET, C#, Java
,
jQuery , Android , iOS , Windows Phone
Registered :
109,037
HOME
>
บทความจากสมาชิก
>
7 เหตุผล ที่ไม่ควรใช้ SELECT * เพื่อ Query ข้อมูล
7 เหตุผล ที่ไม่ควรใช้ SELECT * เพื่อ Query ข้อมูล
7 เหตุผล ที่ไม่ควรใช้ SELECT * เพื่อ Query ข้อมูล
เชื่อว่า Programmer ทุกคน คงเคยใช้คำสั่ง SQL กันมาบ้างแล้ว และคำสั่งพื้นฐานที่ทุกคนถนัดและมักจะใช้กันบ่อยก็คือ SELECT * แต่วันนี้เรามาดูกันว่า คำสั่งที่เรามักใช้งานกันบ่อยๆ นี้ อาจจะไม่ค่อยเหมาะที่จะใช้เท่าไรนัก แต่จะมีเหตุผลอะไรบ้าง เราไปดูกันเลยครับ
1. เกิด Input/Output ที่ไม่จำเป็น
เมื่อคุณใช้ SELECT * คุณจะได้รับ Data ที่คุณไม่จำเป็นต้องใช้งานกลับมาด้วย และในการดึง Data เหล่านั้นมาใช้ มันก็ส่งผลอย่างอื่นด้วยเช่นกัน คือ ส่งผลให้เกิด Input/Output ที่เขียน/อ่านจาก Disk โดยไม่จำเป็น และเมื่อมีการ Read Data หรือ Index ทั้งหมด มันก็เป็นสาเหตุทำให้การ Query ข้อมูลนั้น “ช้าลง” อีกด้วย
2. Network Traffic เพิ่มสูงขึ้น
เมื่อใช้ SELECT * มันจะส่ง Data กลับมาให้มากกว่าที่คุณต้องการ ซึ่งจะทำให้ใช้ Network Bandwidth มากยิ่งขึ้น การเพิ่มขึ้นของ Network Bandwidth นั้นหมายถึงว่า Data จะใช้เวลานานกว่าจะไปถึง Client Application ซึ่งอาจเป็น SQL Server Management Studio (SSMS) หรือ Java Application Server ของคุณ
3. ใช้หน่วยความจำ Application เพิ่มขึ้น
เนื่องจากการเพิ่มขึ้นของ Data ทำให้ Application ของคุณต้องการใช้หน่วยความจำที่เพิ่มมากขึ้น เพื่อเก็บ Data ที่ไม่จำเป็นซึ่งไม่ได้ถูกนำไปใช้งาน
4. มี Dependency เรื่องลำดับของ Column ในผลลัพธ์
เมื่อคุณใช้คำสั่ง SELECT * ใน Application ของคุณ การเรียงลำดับของ Column ในการแสดงผลลัพธ์จะเปลี่ยนแปลงไป ถ้ามีการเพิ่ม Column ใหม่เข้าไป หรือมีการเปลี่ยนลำดับของ Column
5. การแสดงผลใน Views ผิดพลาด ขณะที่เพิ่ม Column ใหม่ลงใน Table
เมื่อใช้คำสั่ง SELECT * ใน View จากนั้นคุณอาจเผลอสร้าง Bug ด้วยการเพิ่ม Column ใหม่และลบบาง Column ออกจาก Table ไป ถามว่าเพราะอะไร? คำตอบคือ View ของคุณจะ Return ผลลัพธ์ที่ไม่ถูกต้องออกมาให้นั่นเอง และเพื่อหลีกเลี่ยงปัญหาดังกล่าว คุณควรระบุ WITH SCHEMABINDING ใน View ไว้ด้วยเสมอ ซึ่งวิธีนี้จะช่วยป้องกันปัญหาจากการใช้ SELECT * ใน View นั่นเอง
6. เกิด Conflict ใน JOIN Query
เมื่อใช้ SELECT * ในคำสั่ง JOIN query มันอาจสร้างความยุ่งยากให้คุณยิ่งขึ้น หาก Table ต่างๆ ดันมีบาง Column ที่มีชื่อเหมือนกัน เช่น status, active, name เป็นต้น จากการ Query ตรงๆ แบบนี้ มันอาจจะดี แต่เมื่อคุณพยายามที่จะเรียงลำดับ Column เหล่านั้น หรือใช้การ Query ใน Common Table Expression (CTE) หรือ Derived Table คุณจำเป็นต้องทำการปรับเปลี่ยนบางอย่าง
7. Copy ข้อมูลจาก Table หนึ่งไปยัง Table อื่น
การใช้คำสั่ง SELECT * into INSERT..SELECT statement ถือเป็นวิธีทั่วไปในการ Copy ข้อมูลจาก Table หนึ่งไปยัง Table อื่น เป็นไปได้ที่คุณอาจจะ Copy ข้อมูลที่ไม่ถูกต้องลงใน Column ที่ไม่ตรงกันด้วยหากลำดับของ Column ระหว่าง 2 Table ไม่เหมือนกัน
มี Programmer บางคนคิดว่าการใช้คำสั่ง SELECT * กับ SELECT 1 ร่วมกับคำสั่ง EXISTS จะช่วยทำให้เร็วขึ้น เนื่องจาก Query Parser จะทำงานมากเป็นพิเศษเพื่อที่จะ Validate ตัว Static Value นั้นอาจเป็นความจริงเมื่อในอดีต แต่ในปัจจุบัน Parser ได้ถูกพัฒนาให้มีความฉลาดมากพอที่จะรู้ได้ว่า ภายใน EXISTS clause นั้น, SELECT list มันไม่มีความเกี่ยวข้องกันเลย
และนั่นคือเหตุผลทั้งหมด ที่คุณไม่ควรใช้ SELECT * ใน SQL Query (ถ้าไม่จำเป็น) และมันจะดีกว่า ถ้าคุณใช้การระบุ Column ที่ชัดเจนในคำสั่ง SELECT แทนที่จะใช้ * ที่มันจะแสดงผลข้อมูลออกมาทั้งหมด ขณะเดียวกันการระบุร Column ไม่เพียงช่วยเพิ่ม Performance เท่านั้น แต่ยังช่วยให้ Code ของคุณดูมีความชัดเจนยิ่งขึ้น นอกจากนี้ยังช่วยให้คุณสามารถสร้าง Code ที่ Maintain ได้สะดวก และมันจะไม่สร้างปัญหาในกรณีที่เพิ่ม Column ใหม่ลงไปใน Table โดยเฉพาะอย่างยิ่งหากคุณมี View ซึ่งอ้างอิงไปถึง Table ต้นฉบับ
ที่มา: https://www.techstarthailand.com/blog/detail/Why-you-should-not-use-SELECT-in-SQL-Query/459
Share
By :
lnw Yod
Article :
บทความเป็นการเขียนโดยสมาชิก หากมีปัญหาเรื่องลิขสิทธิ์ กรุณาแจ้งให้ทาง webmaster ทราบด้วยครับ
Score Rating :
Create Date :
2019-02-22
Download :
No files
Sponsored Links
Free Tutorial
สอน Google Maps Api
สอน Windows Service
สอน Entity Framework
สอน Android
สอน Java เขียน Java
Java GUI Swing
สอน JSP (Web App)
iOS (iPhone,iPad)
Windows Phone
Windows Azure
Windows Store
Laravel Framework
Yii PHP Framework
สอน jQuery
สอน jQuery กับ Ajax
สอน PHP OOP (Vdo)
Ajax Tutorials
SQL Tutorials
สอน SQL (Part 2)
JavaScript Tutorial
Javascript Tips
VBScript Tutorial
VBScript Validation
Microsoft Access
MySQL Tutorials
-- Stored Procedure
MariaDB Database
SQL Server Tutorial
SQL Server 2005
SQL Server 2008
SQL Server 2012
-- Stored Procedure
Oracle Database
-- Stored Procedure
SVN (Subversion)
แนวทางการทำ SEO
ปรับแต่งเว็บให้โหลดเร็ว
Hit Link
นำเข้าสินค้าจากจีน
Taobao
เฟอร์นิเจอร์
ของพรีเมี่ยม
ร่ม
ปากกา
power bank
แฟลชไดร์ฟ
กระบอกน้ำ
แลกเปลี่ยน Exchange Link
ลองค้นหาสิ่งที่ต้องการ
Load balance :
Server 03
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[
Conditions Privacy Statement
]
ติดต่อโฆษณา
081-987-6107
อัตราราคา
คลิกที่นี่
Inline