P67602_web相關概念回顧與web伺服器軟體_概述
阿新 • • 發佈:2022-12-02
看原始的SQL語句
SELECT * FROM `discuss_post` limit 300000,5
另外可以看到這裡並沒有走索引
比如這裡會查詢前300005條資料,然後丟掉前面的300000條資料
對於ID自增
可以利用主鍵索引
SELECT * FROM `discuss_post` where id> 300000 limit 5
效能提升還是比較明顯
可以看到是走了主鍵索引,涉及的行數也大幅下降
SELECT * FROM `discuss_post` where id between 300000 and 300005
用BETWEEN也是差不多的效果,他倆本質上沒有區別
BETWEEN是包含邊界條件的,所以這裡查出來會比上面多一條
但是這兩種方式也有明顯的弊端,要求ID為遞增數字而且中間不能有斷裂
limit ID
SELECT * FROM `discuss_post` where id >(SELECT id from `discuss_post` LIMIT 300000,1) limit 5
雖然仍然有大量丟棄,但是隻查了ID欄位,所以查詢和丟棄的資料其實已經少了很多
效率可以做到和上面差不多,但是沒有了對ID欄位的限制,不要求是遞增的數字,也不要求沒有斷裂
內層不走主鍵索引,但是外層走
延遲關聯
SELECT * FROM `discuss_post`JOIN (SELECT id from `discuss_post` LIMIT 300000,5) as x USING(id)
模板是這樣的
SELECT <cols> FROM profiles JOIN(
SELECT <primary key cols> FROM profiles
WHERE ... LIMIT 1000000,5
)AS x USING(<primary key cols>);
USING關鍵字相當於ON