ในโลกของการพัฒนาซอฟต์แวร์และระบบข้อมูล ข้อมูลไม่ได้ไหลบ่ามาแค่จากภายนอกเท่านั้น แต่ยังรวมถึงความคาดหวังที่ให้เราต้องจัดการงานหลายอย่างพร้อมกัน (Multitasking) ซึ่งเป็นภาวะที่ทำให้เกิด Cognitive Load ทั้งกับสมองมนุษย์และประสิทธิภาพของโค้ด
ในฐานะ System Specialist เราทราบดีว่าการพยายามทำทุกอย่างพร้อมกัน ไม่ว่าจะเป็นการสลับบริบทในการทำงาน หรือการเขียน Query ที่ซับซ้อนเกินความจำเป็น มักนำไปสู่ผลลัพธ์ที่คุณภาพต่ำ ความผิดพลาดสูง และประสิทธิภาพที่ลดลง บทความนี้จะเปรียบเทียบแนวคิด Multitasking กับ Single-tasking โดยใช้หลักการของ PostgreSQL เพื่อแสดงให้เห็นว่า ‘การจดจ่อ’ (Single-tasking) คือกุญแจสำคัญสู่โค้ดที่มีประสิทธิภาพสูงสุด
🧠 Multitasking ในฐานข้อมูล: การสลับบริบทที่สิ้นเปลืองทรัพยากร
ในทางจิตวิทยา การทำหลายอย่างพร้อมกันคือภาพลวงตา (Myth) เพราะสมองต้องใช้พลังงานในการ ‘โหลด’ บริบทใหม่ทุกครั้ง ซึ่งเทียบได้กับการเขียนโค้ดที่ไม่เป็นระเบียบ หรือการรวม Logic หลายส่วนเข้าด้วยกันโดยไม่มีโครงสร้างที่ชัดเจน
ใน PostgreSQL หากเราพยายามจัดการข้อมูลหลายชุดพร้อมกันอย่างไม่เป็นระบบ (เช่น การใช้ UNION ที่ซับซ้อนเกินไป) Query นั้นจะกลายเป็น ‘Context Switching’ ทางโค้ด ทำให้ Optimizer ทำงานหนักและอ่านยาก เราต้องเสียทรัพยากรในการประมวลผลที่ไม่จำเป็น
ตัวอย่าง: Multitasking Code (Inefficient Context Switch)
สมมติว่าเราต้องการข้อมูลผู้ใช้ที่มาจากหลายแหล่งพร้อมกันโดยไม่มีการจัดลำดับที่ดี:
SQL
SELECT user_id, name FROM users WHERE status = 'active' UNION SELECT id, username FROM logs WHERE type = 'login';
Query ข้างต้นแม้จะทำงานได้ แต่ก็ขาดความต่อเนื่องทางตรรกะ (Logical Flow) ทำให้ยากต่อการบำรุงรักษาและอาจทำให้ประสิทธิภาพลดลงเมื่อข้อมูลมีขนาดใหญ่ขึ้น
✨ Single-tasking: พลังของการจดจ่อด้วย CTEs และ Recursive Logic
Single-tasking ในโลกของฐานข้อมูลคือการกำหนดขอบเขตงานให้ชัดเจน (Scope) และทำมันให้เสร็จสมบูรณ์ในขั้นตอนเดียว การใช้ Common Table Expressions (CTEs) หรือ `WITH RECURSIVE` คือตัวอย่างที่ดีที่สุดของการทำงานแบบ Deep Work เพราะเราบังคับให้ระบบประมวลผลตามลำดับตรรกะที่กำหนดไว้ทีละขั้น
การใช้ CTEs ช่วยให้โค้ดของเรามีโครงสร้างเหมือนการคิดเป็นขั้นตอน (Step-by-step thinking) ทำให้แต่ละส่วนของ Logic ถูกจัดการอย่างสมบูรณ์ก่อนที่จะส่งต่อผลลัพธ์ไปยังขั้นตอนถัดไป ซึ่งเป็นการเพิ่มประสิทธิภาพและลดภาระทางความคิดในการทำความเข้าใจ Query นั้น ๆ
ตัวอย่าง: Single-tasking Code (Deep Work with CTEs)
การใช้ Recursive CTE เพื่อจำลองการค้นหาข้อมูลแบบลำดับชั้น (Hierarchical Data):
SQL
WITH RECURSIVE department_hierarchy AS (
SELECT dept_id, parent_dept_id, name FROM departments WHERE parent_dept_id IS NULL
UNION ALL
SELECT d.dept_id, d.parent_dept_id, d.name
FROM departments d JOIN department_hierarchy dh ON d.parent_dept_id = dh.dept_id
)
SELECT * FROM department_hierarchy ORDER BY dept_id;
โค้ดนี้แสดงถึงการจดจ่อกับงานเดียว: การสร้างโครงสร้างลำดับชั้นอย่างสมบูรณ์ (Single Goal) โดยใช้พลังของ CTEs ทำให้ Query มีความชัดเจนและมีประสิทธิภาพสูงกว่าการพยายามรวม Logic ที่ซับซ้อนทั้งหมดไว้ในคำสั่ง SELECT เดียว
🚀 บทสรุป: สร้างโค้ดที่โฟกัสเพื่อระบบที่ยั่งยืน
ไม่ว่าจะเป็นสมองมนุษย์หรือฐานข้อมูล PostgreSQL การจดจ่อกับภารกิจเดียว (Single-tasking) คือแนวทางปฏิบัติที่ดีที่สุดเสมอ เมื่อคุณเขียน Query ให้คิดเหมือนการทำงานแบบ Deep Work: กำหนดขอบเขตให้ชัดเจน ใช้ CTEs เพื่อแบ่ง Logic เป็นขั้นตอนย่อย ๆ และทำให้แต่ละส่วนนั้นสมบูรณ์ก่อนจะรวมเข้าด้วยกัน
การทำเช่นนี้ไม่เพียงแต่ช่วยเพิ่มประสิทธิภาพของฐานข้อมูลเท่านั้น แต่ยังช่วยให้โค้ดของคุณอ่านง่าย บำรุงรักษาง่าย และเป็นรากฐานที่มั่นคงสำหรับระบบขนาดใหญ่ในระยะยาว