–方法 1:直接使用資料庫提供的 sql 語句 --語句樣式: mysql 中,可用如下方法: select * from 表名稱 limit m,n --適應場景: 適用於資料量較少的情況(元組百/千級) --原因/缺點: 全表掃瞄,速度會很慢 且 有的資料庫結果集返回不穩定(如某次返 回 1,2,3,另外的一次返回 2,1,3). limit 限制的是從結果集的 m 位置處取出 n 條 輸出,其餘拋棄.
–方法 2:建立主鍵或唯一索引, 利用索引(假設每頁 10 條) --語句樣式: mysql 中,可用如下方法: select from 表名稱 where
id_pk > (pagenum10) limit m --適應場景: 適用於資料量多的情況(元組數上萬) --原因: 索引掃瞄,速度會很快. 有朋友提出: 因為資料查詢出來並不是按照 pk_id 排序的,所以會有漏掉資料的情況,只能方法 3
–方法 3:基於索引再排序 --語句樣式: mysql 中,可用如下方法: select from 表名稱 where id_pk > (pagenum10) order by id_pk asc limit m --適應場景: 適用於資料量多的情況(元組數上萬). 最好 order by 後的列物件 是主鍵或唯一所以,使得 orderby 操作能利用索引被消除但結果集是穩定的(穩 定的含義,參見方法 1) --原因: 索引掃瞄,速度會很快. 但 mysql 的排序操作,只有 asc 沒有 desc(desc 是假的,未來會做真正的 desc,期待…).
–方法 4:基於索引使用 prepare(第乙個問號表示 pagenum,第二個?表示 每頁元組數) --語句樣式: mysql 中,可用如下方法: prepare stmt_name from select from 表名稱 where id_pk > (? ?) order by id_pk asc limit m–適應場景: 大資料量 --原因: 索引掃瞄,速度會很快. prepare 語句又比一般的查詢語句快一點。
–方法 5:利用 mysql 支援 order 操作可以利用索引快速定位部分元組,避免 全表掃瞄 比如: 讀第 1000 到 1019 行元組(pk 是主鍵/唯一鍵).
select * from your_table where pk>=1000 order by pk asc limit 0,20
–方法 6:利用"子查詢/連線+索引"快速定位元組的位置,然後再讀取元組. 道理 同方法 5 如(id 是主鍵/唯一鍵,藍色字型時變數):
MySQL 百萬級以上分頁優化
正常我們碼農資料庫的時候一般都是以下這種查詢方式 select from table order by id limit 100000,10 但是以上這種查詢會導致我們資料慢死,一般我們採用以下方式 select from table order by id limit 1000000,10 以上這...
MySQL百萬級資料分頁查詢優化方案
當需要從資料庫查詢的表有上萬條記錄的時候,一次性查詢所有結果會變得很慢,特別是隨著資料量的增加特別明顯,這時需要使用分頁查詢。對於資料庫分頁查詢,也有很多種方法和優化的點。下面簡單說一下我知道的一些方法。準備工作 為了對下面列舉的一些優化進行測試,下面針對已有的一張表進行說明。表名 order hi...
mysql百萬級資料分頁查詢緩慢優化 實戰
畫面是這樣的 大概是這樣的 select count id from 查出總數 select from limit m,n 查出分頁資料 和前端的互動是這樣的 你傳給我查詢條件和pagenum pagesize 我給你返回total resultlist 恩,可以開始預估開發時間了 面對這麼多的資料...