เทคนิคการ Join ข้อมูล ตอนที่ 3
เนื่องจากการ JOIN คือการรวมข้อมูลเข้าด้วยกันจากหลายๆตาราง ดังนั้นสิ่งที่เกิดขึ้นและหลีกเลี่ยงไม่ได้ก็คือการเสียเวลาส่วนหนึ่งไปกับการรวมข้อมูลจากหลายๆตารางเข้าด้วยกัน ซึ่งจะเสียเวลามากสุด (หรือมีประสิทธิภาพน้อยลง) เมื่อจำนวนตารางที่นำมา JOIN กันมีหลายตาราง หรือข้อมูลในแต่ละตารางมีจำนวนมากขึ้น ดังนั้นการเลือกวิธีการ JOIN ที่เหมาะสม (การจัดลำดับและรูปแบบการ Query) จะช่วยให้การประมวลผลเร็วขึ้น
ลองมาดูลำดับขั้นการทำงานของคำสั่งด้านบนกันดู
I.item_id ควรกำหนดเป็น Index
2.หลีกเลี่ยงการ JOIN หากไม่จำเป็น หากผลลัพท์ที่ต้องการจากตารางที่นำมา JOIN เป็นเพียงข้อมูลแค่ ฟิลด์เดียว (การ JOIN สามารถให้ผลลัพท์ได้มากกว่า 1 ฟิล์ด) อาจเลี่ยงไปใช้ Subquery แทน
SELECT I.item_id,I.detail,G.cat_name FROM items AS I
INNER JOIN categories AS C ON C.item_id=I.item_id
INNER JOIN category AS G ON G.cat_id=C.cat_id
WHERE I.item_id=1
ลองมาดูลำดับขั้นการทำงานของคำสั่งด้านบนกันดู
- เลือกตาราง items
- จับคู่ตาราง items กับตาราง categories
- จับคู่ผลลัพท์ที่ได้กับตาราง category
- ทำคำสั่ง WHERE
- ทำคำสั่ง SELECT
การ JOIN ที่มีประสิทธิภาพ
1.ใช้คีย์ในการ JOIN เนื่องจากการค้นหาข้อมูลที่เป็น Index จะใช้เวลาน้อยที่สุด ดังนั้นการกำหนดฟิลด์ที่จะนำมา JOIN ให้เป็น Index จะช่วยให้การประมวลผลเร็วขึ้นINNER JOIN categories AS C ON C.item_id=I.item_id
I.item_id ควรกำหนดเป็น Index
2.หลีกเลี่ยงการ JOIN หากไม่จำเป็น หากผลลัพท์ที่ต้องการจากตารางที่นำมา JOIN เป็นเพียงข้อมูลแค่ ฟิลด์เดียว (การ JOIN สามารถให้ผลลัพท์ได้มากกว่า 1 ฟิล์ด) อาจเลี่ยงไปใช้ Subquery แทน
SELECT I.item_id,I.detail
,(SELECT cat_name FROM category WHERE cat_id IN (
SELECT cat_id FROM categories WHERE item_id=I.item_id
) LIMIT 1) AS cat_name
FROM items AS I
WHERE I.item_id=1
- เลือกตาราง items
- เลือกตาราง categories
- เลือกตาราง category ที่ตรงกันกับ categories
- ทำคำสั่ง WHERE
- ทำคำสั่ง SELECT
SELECT Q.item_id,Q.detail,G.cat_name
FROM (SELECT I.item_id,I.detail FROM items AS I WHERE I.item_id=1) AS Q
INNER JOIN categories AS C ON C.item_id=Q.item_id
INNER JOIN category AS G ON G.cat_id=C.cat_id
- เลือกตาราง items จากคำสั่ง FROM
- ทำคำสั่ง WHERE
- ทำคำสั่ง SELECT ตาราง items
- จับคู่ผลลัพท์ กับตาราง categories
- จับคู่ผลลัพท์ที่ได้กับตาราง category
- ทำคำสั่ง SELECT