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"; //第二步:根據取出id再查具體的資料,因為使用id查詢比較快,因為id是主鍵。因此使用乙個連線查詢,就可以,我們使用內連線。inner join / left join / right join沒有用到索引
// 轉換成
$sql = "select id from user limit 10000,10"; //
用到索引覆蓋
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.倒排表優化法 倒排表法類似建立索引,用一張表來維護頁數,然後通過高效的連線得到資料 缺點 只適合資料數固定的情況,資料...