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

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
PHP ส่ง Line Notify ข้อความเข้า Inbox ส่วนตัวหรือ Group ง่ายๆ ด้วย PHP
PHP ส่ง Line Notify ข้อความเข้า Inbox ส่วนตัวหรือ Group ง่ายๆ ด้วย PHP
วิธีการใช้ Line ส่งข้อความเข้า Line ส่วนตัว หรือ ส่งข้อความเข้า Line Group ด้วย PHP เหมาะสำหรับการแจ้งเตือนกิจกรรมต่างๆ ที่ต้องการทราบ เช่น รายการสมัครสมาชิก, กิจกรรมที่เกิดขั้นบนเว็บ , รายการสั่งซื้อ
Rating : Update : 2019-04-23 10:59:06
2 หัวใจหลักของการทำ SEO ยุค 2018 เรื่องที่ไม่ควรละเลยสำหรับคนทำเว็บ
2 หัวใจหลักของการทำ SEO ยุค 2018 เรื่องที่ไม่ควรละเลยสำหรับคนทำเว็บ
กลยุทธ์ทางการตลาดที่หลายต่อหลายคนที่มักจะต่างหลีกไม่พ้นในสังคมสมัยนี้นั้นคือ การทำ”SEO”เพราะการทำ “SEO “ถือเป็นการโปรโมทเว็บไซต์ของเราให้เป็นที่รู้จักของตลาดบนโลกออนไลน์
Rating : Update : 2018-10-17 13:22:26
C# เปลี่ยนชื่อ เพลง ด้วย regext
C# เปลี่ยนชื่อ เพลง ด้วย regext
C# เปลี่ยนชื่อ เพลง ด้วย regext หลายคนมักเจอ เวลาโหลดเพลงมาแล้วมักจะมีตัวเลขข้างหน้าติดมาด้วย เรามาลบมันออกกัน
Rating : Update : 2019-05-03 12:54:52
PHP ใช้สำหรับเปลี่ยนรูปแบบของวันตามที่เรากำหนด เช่น 2018-3-10 -> 10 Mar 2018 หรือ 10 March 2
PHP ใช้สำหรับเปลี่ยนรูปแบบของวันตามที่เรากำหนด เช่น 2018-3-10 -> 10 Mar 2018 หรือ 10 March 2
ฟังก์ชั่นนี้ใช้สำหรับเปลี่ยนรูปแบบของวันตามที่เรากำหนด เช่น 2018-3-10 -> 10 Mar 2018 หรือ 10 March 2018
Rating : Update : 2018-03-11 10:49:35
แก้ปัญหา Facebook Like หายเมื่อเปลี่ยนจาก HTTP เป็น HTTPS
แก้ปัญหา Facebook Like หายเมื่อเปลี่ยนจาก HTTP เป็น HTTPS
ในช่วงนี้หลายๆ เว็บกำลังเปลี่ยน เว็บจาก HTTP เป็น HTTPS และถ้ามีการใช้ Plugin Facebook Like / Shared คงจะเจอปัยหา Line หายกัน
Rating : Update : 2018-09-18 15:14:43
ติดตั้ง SSL Certificate (https) บน Direct Admin แบบง่าย ๆ (Step by Step)
ติดตั้ง SSL Certificate (https) บน Direct Admin แบบง่าย ๆ (Step by Step)
วิธีการติดตั้ง SSL Certificate ให้เว็บไซต์สามารถเปิดแบบ https รองรับมารฐานการรับส่งข้อมูล อย่างปลอดภัยและสร้างความน่าเชื่อถือให้กับเว็บไซต์
Rating : Update : 2017-12-22 17:20:49
JavaScript ใช้ Deferred แทน  Callback
JavaScript ใช้ Deferred แทน Callback
การทำงานของ javascript บางอย่าง จำเป็นต้องรองานก่อนหน้าให้เสร็จก่อนแล้วจึงสั่งให้ทำงานปัจจุบัน การทำแบบนี้แต่เดิมมักใช้ callback function แต่ปัจจุบันนี้มีวิธีที่ดีกว่านั้น คือ Deferred
Rating : Update : 2018-07-04 01:12:34
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 05
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 อัตราราคา คลิกที่นี่