ทำไม SELECT * จึงช้ากว่าการระบุชื่อคอลัมน์
การใช้ SELECT * ทำให้ MySQL ต้องอ่านข้อมูลทุกคอลัมน์ รวมถึงคอลัมน์ที่ไม่จำเป็น ส่งผลให้:
- เพิ่ม I/O และการถ่ายโอนข้อมูลระหว่างดิสก์และหน่วยความจำ
- ไม่สามารถใช้ Covering Index ได้อย่างมีประสิทธิภาพ
- เพิ่มภาระเครือข่ายหากส่งข้อมูลไปยังแอปพลิเคชัน
ตัวอย่างสร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (
Id INT,
Name VARCHAR(20),
Age INT,
ZipCode VARCHAR(20),
CountryName VARCHAR(20)
);
Query OK, 0 rows affected (0.82 sec)
mysql> INSERT INTO DemoTable VALUES(101,'Chris',23,'0909332','US');
mysql> INSERT INTO DemoTable VALUES(102,'Bob',24,'8747443','AUS');
mysql> INSERT INTO DemoTable VALUES(103,'Adam',21,'9988833','UK');
ใช้ SELECT *
mysql> SELECT * FROM DemoTable;
ใช้ระบุชื่อคอลัมน์ (แนะนำ)
mysql> SELECT Id, Name, Age, ZipCode, CountryName FROM DemoTable;
ทั้งสองคำสั่งให้ผลลัพธ์เหมือนกัน แต่คำสั่งที่สองมีประสิทธิภาพดีกว่า
คำแนะนำ
- ระบุชื่อคอลัมน์เสมอในโค้ด Production
- ใช้
SELECT *เฉพาะในการสำรวจข้อมูล Ad-hoc เท่านั้น - หากตารางมีคอลัมน์มาก (เช่น 40+) ความแตกต่างของประสิทธิภาพจะชัดเจนมาก