DROP TABLE IF EXISTS `t_user`; CREATE TABLE `test`.`t_user`( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `username` VARCHAR(200) NOT NULL DEFAULT '', PRIMARY KEY (`id`) );
# 經常使用的分頁查詢SQL SELECT id,`username` FROM t_user LIMIT 100,100; SELECT id,`username` FROM t_user LIMIT 10000,100; SELECT id,`username` FROM t_user LIMIT 1000000,100; SELECT id,`username` FROM t_user LIMIT 5000000,100;
執行結果:sql
分析結論ide
limit 語句的查詢時間與起始記錄的位置成正比 MySQL 的 limit 語句是很方便,可是對記錄不少的表並不適合直接使用
優化辦法(一)
利用主鍵索引來加速分頁查詢測試
SELECT * FROM t_user WHERE id > 1000000 LIMIT 100; SELECT * FROM t_user WHERE id > 1000000 AND id <= 5000000+100;
分析結果:優化
分析語句執行:code
EXPLAIN SELECT id,`name` FROM t_test LIMIT 1000000,100; EXPLAIN SELECT * FROM t_user WHERE id > 1000000 LIMIT 100; EXPLAIN SELECT * FROM t_user WHERE id > 1000000 AND id <= 5000000+100;
結果
blog
使用邏輯刪除,不會形成主鍵不連續
使用上面的優化方式便可索引
SELECT * FROM t_user WHERE id > 1000000 LIMIT 100; SELECT * FROM t_user WHERE id > 1000000 AND id <= 5000000+100;
SELECT t.id, t.name, FROM t_user AS t JOIN (SELECT id FROM t_user LIMIT 1000000, 100) tmp ON t.id = tmp.id ;
執行結果對比it