MySQL筆記

內容整理在GitHub,地址https://github.com/Muscleape/TestDemoProjects

MySQL分頁查詢

limit的用法mysql

  • limit子句能夠被用於強制select語句返回指定的記錄數;
  • 接受1個或2個整數常量作參數,第一個是返回記錄行的偏移量,第二個是返回記錄行的最大數目
-- 檢索記錄行6~15;
mysql> SELECT * FROM table LIMIT 5,10;
-- 從某個偏移量到記錄集的最後,能夠指定第二個參數爲-1;
mysql> SELECT * FROM table LIMIT 95,-1;
-- 若是隻給定一個參數,表示返回的做答記錄行數目;
mysql> SELECT * FROM table LIMIT 5; 
-- LIMIT n 等價於 LIMIT 0,n;

MySQL分頁查詢語句的性能分析git

  • 確保使用索引,下列語句中在ta_id和id兩列上創建索引
mysql> SELECT * FROM ta WHERE ta_id = 111 ORDER BY id LIMIT 50,10;
  • 使用子查詢,隨着數據量增長,越日後LIMIT語句的偏移量就會越大,速度會明顯變慢;
-- 使用子查詢以前,偏移量爲10000;
mysql> SELECT * FROM ta WHERE ta_id = 123 ORDER BY id LIMIT 10000, 10;
-- 使用子查詢以後;
mysql>
SELECT * FROM ta WHERE id >=
(SELECT id FROM ta WHERE ta_id = 111 ORDER BY id LIMIT 10000,1)
LIMIT 10;

大數據量的MySQL表,LIMIT分頁存在嚴重的性能問題:github

優化方式:sql

  • 使用子查詢
  • 利用相似策略模式處理分頁,判斷100頁之內使用基本的分頁方式,100頁以上使用子查詢的分頁方式;
  • 使用有索引的列或主鍵列進行order by操做
  • 記錄上次返回的主鍵,下次查詢時使用主鍵過濾
  • 爲了保證index索引列連續,能夠爲每一個表增長一個自增的字段,而且加上索引
相關文章
相關標籤/搜索