1. 程式人生 > 其它 >P67602_web相關概念回顧與web伺服器軟體_概述

P67602_web相關概念回顧與web伺服器軟體_概述

看原始的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