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,150

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


 
VPS  250 ҷ͹

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
JavaScript ใช้ Deferred แทน  Callback
JavaScript ใช้ Deferred แทน Callback
การทำงานของ javascript บางอย่าง จำเป็นต้องรองานก่อนหน้าให้เสร็จก่อนแล้วจึงสั่งให้ทำงานปัจจุบัน การทำแบบนี้แต่เดิมมักใช้ callback function แต่ปัจจุบันนี้มีวิธีที่ดีกว่านั้น คือ Deferred
Rating : Update : 2018-07-04 01:12:34
แก้ปัญหา Facebook Like หายเมื่อเปลี่ยนจาก HTTP เป็น HTTPS
แก้ปัญหา Facebook Like หายเมื่อเปลี่ยนจาก HTTP เป็น HTTPS
ในช่วงนี้หลายๆ เว็บกำลังเปลี่ยน เว็บจาก HTTP เป็น HTTPS และถ้ามีการใช้ Plugin Facebook Like / Shared คงจะเจอปัยหา Line หายกัน
Rating : Update : 2018-09-18 15:14:43
(SQLSRV) PHP SQL Server กับ Login Form ตรวจสอบ User/Password แบบง่าย ๆ ด้วย sqlsrv
(SQLSRV) PHP SQL Server กับ Login Form ตรวจสอบ User/Password แบบง่าย ๆ ด้วย sqlsrv
(SQLSRV) PHP SQL Server กับ Login Form อัพเดด Code การทำ Form Login แบบง่าย ๆ กับฐานข้อมูล SQL Server กับ ฟังก์ชั่นของ sqlsrv
Rating : Update : 2019-04-09 16:52:00
5 ไอเดียเด่น ทำเว็บไซต์อะไรดี?
5 ไอเดียเด่น ทำเว็บไซต์อะไรดี?
ปัจจุบันการทำเว็บไซต์ไม่ใชเรื่องยากอีกต่อไป ทำให้หลายคนหันมาสร้างพื้นที่ส่วนตัวบนเว็บกันมากขึ้น และที่สำคัญทำ
Rating : Update : 2018-02-27 17:17:04
CI เชื่อมต่อ SQL SERVER Express
CI เชื่อมต่อ SQL SERVER Express
เขียน CI ให้เชื่อมต่อ SQL SERVER Express บน Server 2012 R2 และให้ Support ภาษาไทย(UTF-8)
Rating : Update : 2018-05-19 15:12:05
ฐานข้อมูล MySql ชื่อประเทศ ไทย+อังกฤษ
ฐานข้อมูล MySql ชื่อประเทศ ไทย+อังกฤษ
ฐานข้อมูล MySql ชื่อประเทศ ไทย+อังกฤษ (แปะไว้เตือนตัวเอง เวลาลืมว่าเคยทำไว้) พร้อมการใช้กับ PHP
Rating : Update : 2018-03-23 20:57:43
แจกระบบตัดบัตรเติมเงินทรูมันนีเข้าไปยังบัญชี True วอเลท
แจกระบบตัดบัตรเติมเงินทรูมันนีเข้าไปยังบัญชี True วอเลท
สคริปนี้จะทำการตัดเงินและ return ค่ามาให้ตามที่เราเติมเงินไปสามารถนำไปประยุกต์ใช้ได้โดยไม่ต้องผ่านตัวกลางใดๆเลยครับ
Rating : Update : 2018-02-22 09:22:11
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
   


Acc : thaicreate@hotmail.com






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