最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL 深分頁查詢優(yōu)化實踐與經驗分享

 更新時間:2025年12月16日 11:22:32   作者:kkkkkkkkl24  
文章總結了在企業(yè)級項目中優(yōu)化深分頁查詢的經驗,包括執(zhí)行計劃分析、索引優(yōu)化和游標分頁改寫,通過復合索引和游標分頁,可以顯著提高查詢性能,感興趣的朋友跟隨小編一起看看吧

在企業(yè)級項目中,深分頁查詢經常會成為性能瓶頸。本篇文章總結了我在實踐中優(yōu)化深分頁 SQL 的經驗,包括 執(zhí)行計劃分析、索引優(yōu)化、游標分頁改寫 等內容。

一、問題場景

假設我們有一張訂單表 orders,包含字段:

id, user_id, status, total_amount, create_time

原始查詢?yōu)椋?/p>

SELECT id, user_id, status, total_amount, create_time
FROM orders
WHERE user_id = 12345
ORDER BY create_time DESC
LIMIT 990, 10;
  • 業(yè)務背景:查詢某用戶最近的訂單,且需要支持分頁。
  • 數(shù)據量假設:企業(yè)級通常幾十萬到幾百萬條訂單。

二、原始 SQL 執(zhí)行計劃分析

使用 EXPLAIN查看原始 SQL:

idselect_typetabletypepossible_keyskeykey_lenrowsExtra
1SIMPLEordersrefuser_iduser_id450Using filesort

分析:

  • type=ref → 使用了 user_id 索引進行精確匹配。
  • key=user_id → 索引選擇正確。
  • Extra=Using filesort → ORDER BY create_time DESC 未覆蓋索引,需要額外排序。
  • 掃描行數(shù) → MySQL 會掃描前 990 條行再丟棄(LIMIT 偏移量大),深分頁效率低。

? 結論:單列索引只能加速 WHERE 條件,排序仍需額外操作。

三、復合索引優(yōu)化

為了提升查詢效率,我們創(chuàng)建復合索引:

ALTER TABLE orders ADD INDEX idx_user_create (user_id, create_time DESC);
  • 作用
    • 覆蓋 WHERE user_id=… 條件。
    • 覆蓋 ORDER BY create_time DESC 條件。
  • 優(yōu)化后 EXPLAIN
idselect_typetabletypepossible_keyskeykey_lenrowsExtra
1SIMPLEordersrefidx_user_createidx_user_create820Using index condition

分析:

  • type=ref → ref → 使用索引范圍掃描,避免全表掃描。
  • key_len=8 → 復合索引長度增加。
  • Extra=Using index condition → ICP (Index Condition Pushdown) 優(yōu)化回表行數(shù)。

? 結論:復合索引同時覆蓋 WHERE + ORDER BY,大幅減少掃描行數(shù)和排序成本。

四、游標分頁改寫

深分頁仍有偏移量大的問題,可以改寫為游標分頁:

SELECT id, user_id, status, total_amount, create_time
FROM orders
WHERE user_id = 12345 AND create_time < '2024-06-01 12:00:00'
ORDER BY create_time DESC
LIMIT 10;
  • 優(yōu)勢
    • 不用 OFFSET,避免掃描前面大量行。
    • 對大數(shù)據量分頁性能穩(wěn)定。
  • EXPLAIN 輸出
idselect_typetabletypepossible_keyskeykey_lenrowsExtra
1SIMPLEordersrangeidx_user_createidx_user_create810Using index condition

? 結論:掃描行數(shù)恒定,排序在索引中完成,性能最佳。

五、實踐總結

  • 深分頁性能問題
    • OFFSET 大時,MySQL 會掃描并丟棄大量行。
    • ORDER BY 未覆蓋索引 → filesort。
  • 優(yōu)化策略
  • 復合索引覆蓋 WHERE + ORDER BY。
  • 游標分頁替代大 OFFSET 分頁。
  • EXPLAIN 解析技巧
  • type → 盡量是 ref、rangeconst,避免 ALL。
  • key / key_len → 關注索引是否被正確使用。
  • Extra → 理解 Using index conditionUsing filesort
  • 經驗總結
    • 使用 ICP 能減少回表行數(shù)。
    • 游標分頁適合大數(shù)據量分頁查詢。
    • SQL 優(yōu)化不僅是索引,改寫查詢邏輯同樣重要。

到此這篇關于MySQL 深分頁查詢優(yōu)化實踐與經驗分享的文章就介紹到這了,更多相關mysql深分頁查詢內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

九江县| 交口县| 弥渡县| 灵武市| 泸西县| 益阳市| 松原市| 高尔夫| 开封县| 宣城市| 牟定县| 嘉兴市| 沈丘县| 石台县| 潼关县| 民和| 岱山县| 托克托县| 咸阳市| 疏附县| 靖安县| 元朗区| 荥阳市| 德令哈市| 沙雅县| 昆山市| 湘潭市| 乐都县| 天柱县| 通榆县| 丘北县| 延边| 扬中市| 自治县| 西城区| 民丰县| 洪江市| 龙口市| 凤庆县| 贵定县| 嘉定区|