目錄
- 造數據
- 查看耗時
- 優化方案
- 總結
造數據
- 我用MySQL存儲過程生成了100多萬條數據,存儲過程如下。
DELIMITER $$
USE `test`$$
DROP PROCEDURE IF EXISTS `proc_user`$$CREATE PROCEDURE `proc_user`()
BEGINDECLARE i INT DEFAULT 1;WHILE i <= 1000000 DOINSERT INTO `test`.`t_user`(`name`) VALUES ( '張三'),
('李四'),
('王五'),
('趙六');SET i=i+1;END WHILE;
END$$CALL `proc_user`();
查看耗時
- 可以看出偏移量越大,后面耗時就越多。
優化方案
- 我們從下面兩條SQL可以看出一些規律。
SELECT * FROM test.t_user order by id desc limit 0,10;
SELECT * FROM test.t_user order by id desc limit 10,10;
- 我是SQL是
order by id desc
,第二頁id,始終小于第一頁的最后一條數據id。那么我們可以用一下主鍵索引,SQL改變一下。
SELECT * FROM test.t_user where id < 871197 order by id desc limit 10;
- 現在分頁SQL是每次要傳入上一頁最后一條數據的id,利用索引很快就查出來了。
總結
- 大數據量分頁查詢MySQL的offset值越大,查詢時間就越慢,我們可以尋找規律轉變一下思路利用索引去優化查詢。