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 สามารถทำงานได้รวดเร็ว

  • pattrawoots

    แล้วถ้าใช้แบบ subquery กับจำนวนช่วงแรกๆ (เลขน้อยๆ) จะช้ากว่าเยอะรึเปล่าครับ? ถ้าไม่เยอะจะได้ไม่ต้องหาตัวเลข cutoff ว่าเริ่มตำแหน่งที่เท่าไหร่ดีถึงจะเปลี่ยนเป็นแบบ subquery

  • http://noomz.in.th noomz

    โอ้ว จริงสินะ มันทำแบบนี้ได้ด้วย
    เคล็ดลับมันคือตรง * กับ id ใช่เปล่าครับ
    แอบสงสัยว่าแบบนี้ mysql มันควรจะ optimize query ตั้งแต่แรกให้ได้หรือเปล่านะ

  • http://www.pittaya.com pittaya

    @noomz – ตอนนี้ก็ยังไม่รู้เลยว่า ควรจะใช้ท่านี้ตอนที่ limit มันมีค่าเท่าไหร่ดี