LIMIT optimization
จดไว้กันลืม
เวลาที่เรา SELECT ข้อมูลจาก MySQL ปกติก็จะเขียนกันแบบนี้
SELECT * FROM data ORDER BY id LIMIT 10,10
แต่ถ้าวันหนึ่ง เรามีข้อมูลมากๆ แล้วต้องการข้อมูลที่ LIMIT เยอะๆ เช่น
SELECT * FROM data ORDER BY id LIMIT 900000,10
Query แบบหลัง จะช้ากว่าแบบแรกอยู่เยอะ
วิธีที่จะ optimize ให้ query แบบหลัง ทำงานได้เร็วขึ้นทำได้แบบนี้
SELECT * FROM data WHERE id >= (SELECT id FROM data ORDER BY id LIMIT 900000,1) LIMIT 10
โดยที่ id ต้องเป็น index จะทำให้ใน subquery สามารถทำงานได้รวดเร็ว


แล้วถ้าใช้แบบ subquery กับจำนวนช่วงแรกๆ (เลขน้อยๆ) จะช้ากว่าเยอะรึเปล่าครับ? ถ้าไม่เยอะจะได้ไม่ต้องหาตัวเลข cutoff ว่าเริ่มตำแหน่งที่เท่าไหร่ดีถึงจะเปลี่ยนเป็นแบบ subquery
โอ้ว จริงสินะ มันทำแบบนี้ได้ด้วย
เคล็ดลับมันคือตรง * กับ id ใช่เปล่าครับ
แอบสงสัยว่าแบบนี้ mysql มันควรจะ optimize query ตั้งแต่แรกให้ได้หรือเปล่านะ
@noomz - ตอนนี้ก็ยังไม่รู้เลยว่า ควรจะใช้ท่านี้ตอนที่ limit มันมีค่าเท่าไหร่ดี