Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 107,503

HOME > บทความจากสมาชิก > 7 เหตุผล ที่ไม่ควรใช้ SELECT * เพื่อ Query ข้อมูล





 
Clound SSD Virtual Server

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
Bookmark.   

  By : lnw Yod
  Article : บทความเป็นการเขียนโดยสมาชิก หากมีปัญหาเรื่องลิขสิทธิ์ กรุณาแจ้งให้ทาง webmaster ทราบด้วยครับ
  Score Rating :
  Create Date : 2019-02-22
  Download : No files
Sponsored Links
แก้ปัญหา Facebook Like หายเมื่อเปลี่ยนจาก HTTP เป็น HTTPS
แก้ปัญหา Facebook Like หายเมื่อเปลี่ยนจาก HTTP เป็น HTTPS
ในช่วงนี้หลายๆ เว็บกำลังเปลี่ยน เว็บจาก HTTP เป็น HTTPS และถ้ามีการใช้ Plugin Facebook Like / Shared คงจะเจอปัยหา Line หายกัน
Rating : Update : 2018-09-18 15:14:43
ติดตั้ง SSL (https) ฟรีโดย Let's Encrypt
ติดตั้ง SSL (https) ฟรีโดย Let's Encrypt
วิธีติดตั้ง SSL โดย Let's Encrypt อย่างง่ายที่สุด.
Rating : Update : 2017-11-06 15:25:43
เปลี่ยนจาก MySQL ไปเป็น MySQLi with Prepare Statement
เปลี่ยนจาก MySQL ไปเป็น MySQLi with Prepare Statement
สืบเนื่องมาจากต้องเพิ่มความปลอกภัยของระบบมากยิ่งขึ้นโดยใช้มาตราฐายของ Open Web Application Security Project (OWASP) หนึ่งในปัญหาหลักที่พบนั่นก็คือเรื่องของ (‘SQL Injection’) (CWE-89)
Rating : Update : 2019-03-18 13:58:49
C# อ่านค่า Text file มาเเสดงบน DataGridView
C# อ่านค่า Text file มาเเสดงบน DataGridView
อ่านค่า Textfile.txt มาเเสดงบน DataGridView เเล้วดึงข้อมูลมาแสดงบน Textbox พอเป็นแนวทางสำหรับ คนที่ต้องการนำไปประยุกใช้ครับ
Rating : Update : 2019-04-23 11:19:42
ตรวจสอบความปลอดภัยของระบบ และเว็บไซต์ ตามมาตราฐานของ OWASP
ตรวจสอบความปลอดภัยของระบบ และเว็บไซต์ ตามมาตราฐานของ OWASP
สืบเนื่องมาจากต้องเพิ่มความปลอกภัยของระบบมากยิ่งขึ้นโดยใช้มาตราฐายของ Open Web Application Security Project (OWASP) OWASP_Code_Review
Rating : Update : 2019-02-22 16:05:27
SQL Server Call HTTP URL เรียกใช้งาน URL Website จาก Stored Procedure
SQL Server Call HTTP URL เรียกใช้งาน URL Website จาก Stored Procedure
เทคนิคการใช้ SQL Server Call URL เรียกใช้งาน URL Website จาก Stored Procedure ของ SQL Server สามารถประยุกต์การใช้งานกับ Function ต่างๆ เช่น การเรียกให้ URL ทำงานเมื่อ Stored Procedure ทำงานเสร็จ
Rating : Update : 2019-04-29 09:39:38
C# DataGridView กับ Event  และ Method แบบ บ้านๆ
C# DataGridView กับ Event และ Method แบบ บ้านๆ
C# DataGridView กับ Event และ Method แบบ บ้านๆ
Rating : Update : 2019-07-18 14:47:30
ThaiCreate.Com Forum


Comunity Forum Free Web Script
Jobs Freelance Free Uploads
Free Web Hosting Free Tools

สอน PHP ผ่าน Youtube ฟรี
สอน Android การเขียนโปรแกรม Android
สอน Windows Phone การเขียนโปรแกรม Windows Phone 7 และ 8
สอน iOS การเขียนโปรแกรม iPhone, iPad
สอน Java การเขียนโปรแกรม ภาษา Java
สอน Java GUI การเขียนโปรแกรม ภาษา Java GUI
สอน JSP การเขียนโปรแกรม ภาษา Java
สอน jQuery การเขียนโปรแกรม ภาษา jQuery
สอน .Net การเขียนโปรแกรม ภาษา .Net
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
ปรับแต่งเว็บให้โหลดเร็ว


สุดยอด Source Code V2.0
 

แจ้งชำระเงิน/โอนเงิน
 

Hit Link
   







Load balance : Server 00
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2019 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 , 08-9968-0655 อัตราราคา คลิกที่นี่