ร่วมลงนาม ยกเลิกกฎหมาย 3 ฉบับ มั่นคงภายใน - กฎอัยการศึก - พ.ร.ก.ฉุกเฉิน

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

3 Comments

  1. pattrawoots says:

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

  2. noomz says:

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

  3. pittaya says:

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

Leave a Reply