MySQL中的翻頁優化和延遲快取

2022-08-25 14:24:30 字數 1352 閱讀 6768

limit offset,n 當offset非常大時,效率極低。

原因是:mysql並不是跳過offset行,然後單取n行。而是取offset+n行。

返回時,放棄前offset行,返回n行。效率較低,當offset越大是,效率越低。

優化方式:

//

計算總的記錄數

$total = ...

//定義每頁顯示數量

$perpage = 10;

//計算總的頁數

$pagecount = min(ceil($total/$perpage),70);

$sql = "select * from user limit 10,10";

//轉換成

缺點:如果資料有被刪除,則取出的資料結果會不一致。

解決方案:

資料不進行物理刪除(可邏輯刪除)最終在頁面上顯示資料時,邏輯刪除的條目不顯示即可。

一般來說,大**的資料都是不物理刪除的,只做邏輯刪除,比如is_delete=1

我們現在必須要查,則只查索引,不查資料,得到id,再用id去查具體條目,這種技巧就是延遲索引。 

第一步:取出資料的id

$sql = "select * from user limit 10000,10"; //

沒有用到索引

// 轉換成

$sql = "select id from user limit 10000,10"; //

用到索引覆蓋

第二步:根據取出id再查具體的資料,因為使用id查詢比較快,因為id是主鍵。因此使用乙個連線查詢,就可以,我們使用內連線。inner join / left join / right join

Mysql優化中遇到的問題和感受

根據客戶需求那邊的需求現有2臺資料庫伺服器,一台做主機一台做從機 由於客戶現場的資料庫伺服器配置很高 cpu12核心,記憶體32gb,16tb的硬碟 所以需要對資料庫進行優化,在網上找了一大堆的mysql優化文章之後,就根據實際情況來更改my.cnf檔案 linux伺服器,windows為my.in...

mysql中limit的優化

mysql的優化是非常重要的。其他最常用也最需要優化的就是limit。mysql的limit給分頁帶來了極大的方便,但資料量一大的時候,limit的效能就急劇下降。同樣是取10條資料 select from yanxue8 visit limit 10000,10 和 select from yan...

MySQL中limit的優化

1.子查詢優化法 先找出第一條資料,然後大於等於這條資料的id就是要獲取的資料 缺點 資料必須是連續的,可以說不能有where條件,where條件會篩選資料,導致資料失去連續性 2.倒排表優化法 倒排表法類似建立索引,用一張表來維護頁數,然後通過高效的連線得到資料 缺點 只適合資料數固定的情況,資料...