⑴ Mysql分頁查詢LIMIT
SELECT * FROM table LIMIT [offset,] rows;
offset :偏移,從 offset 條之後開始選擇數據,如果 offset 不填,則 offset 為0。
rows :從偏移後開始,選擇 rows 條數據。
特點:左開右閉,即選取 (offset,offset+rows] 的數據。
SELECT * FROM table LIMIT 5;
SELECT * FROM table LIMIT 0,5;
區間:(0,5]
offset=0
rows=5-0=5
SELECT * FROM table LIMIT 2,4;
區間:(1,5]
offset=1
rows=5-1=4
SELECT * FROM table LIMIT n,m;
區間:(n-1,m]
offset=n-1
rows=m-n+1
⑵ Mysql使用limit深度分頁優化
mysql使用select * limit offset, rows分頁在深度分頁的情況下。性能急劇下降。
limit用於數據的分頁查詢,當然也會用於數據的截取,下面是limit的用法:
1. 模仿網路、谷歌方案(前端業務控制)
類似於分段。我們給每次只能翻100頁、超過一百頁的需要重新載入後面的100頁。這樣就解決了每次載入數量數據大 速度慢的問題了
2. 記錄每次取出的最大id, 然後where id > 最大id
select * from table_name Where id > 最大id limit 10000, 10;
這種方法適用於:除了主鍵ID等離散型欄位外,也適用連續型欄位datetime等
最大id由前端分頁pageNum和pageIndex計算出來。
3. IN獲取id
4. join方式 + 覆蓋索引(推薦)
如果對於有where 條件,又想走索引用limit的,必須設計一個索引,將where 放第一位,limit用到的主鍵放第2位,而且只能select 主鍵!
1. jdbcpagingReader使用方式
2. db索引分區器使用方式
入參1: 表名 如test_table
入參2: 排序索引欄位 可以是主鍵,也可以是其他索引。需要保證是唯一索引即可。如:id
入參3: 主鍵可手動傳入,也可以根據表名計算出來:現在只支持單列主鍵的。 如:id
入參4: 具體表 要分多少塊。如:4
⑶ 【SQL語句】-分頁查詢limit的用法
select * from table limit 索引 , 查詢的數據個數
select grade from Student limit 5,1。表示:從第6行或者第6頁開始查詢(包括第6行),往後查一行數據,結果是 6.
select * from Customer limit 10 ;--檢索前10行數據,顯示1-10條數據
=select * from Customer limit 0,10 --0可以省略
select * from Customer limit 5,10 ;--檢索從第6行開始向後加10條數據,共顯示id為6,7....15
查詢從某一行開始到結尾的全部數據,可以在第二個參數中設置一個很大的值
如:查詢從第3行開始的後面全部數據
select * from table limit 2,99999999999999999999999999;
擴展:
limit典型的應用場景就是實現分頁查詢
已知:每頁顯示m條數據,求:顯示第n頁的數據
select * from table limit (n-1)m,m
⑷ mysql使用limit分頁優化方案
准備數據是20000000條數據
在分頁場景下,使用limit start end,我們分別看下從10000, 100000, 1000000開始分頁的執行時間(每頁取10條),如下圖
當start較小時,查詢沒有性能問題,但是如上圖查詢時間所示,隨著start增大,查詢消耗時間也在遞增,在start=10000000時,分頁竟然消耗了2秒多,這是不能忍受的。
由此引出對limit分頁的優化,首先來explain該語句,看到查詢沒有使用到任何的索引,進行的是全表掃描,假如limit分頁用到了索引是不是會快很多呢!
explain分析一下,第一行是select * from user_innodb形成的臨時表使用的是全表掃描,第二行是 (SELECT id FROM user_innodb LIMIT 10000000, 10)形成的,使用的是eq_ref,第三行是全表掃描a和bjoin形成的派生表,使用到的是index,所以速度也會快很多
⑸ mysql語句分頁limit什麼意思
主要是取數據條數用的
比如取前幾條或者中間某幾條數據
舉兩個例子吧
limit 10 (limit 0,10的縮寫)這個表示取前十條
limit 2,10 從第三條開始往後取十條,因為起始數字是從0算起的