MySQL的limit工作原理就是先讀取N筆記錄,然後拋棄前N筆,讀M筆想要的
所以N越大,性能會越差
優化前SQL: SELECT * FROM member ORDER BY last_active LIMIT 50,5
優化後SQL: SELECT * FROM member INNER JOIN (SELECT member_id FROM member ORDER BY last_active LIMIT 50, 5) USING (member_id)
分別在於,優化前的SQL需要更多I/O浪費
因為先預索引,再讀數據,然後拋棄無需的資料。
而優化後的SQL(子查詢)只讀索引(Cover Index)就可以了
然後,然後利用member_id讀取需要的資料即可。
資料來源
沒有留言:
張貼留言