MYSQL分頁limit速度太慢優化方法

2022-01-21 14:00:59 字數 2680 閱讀 1894

limit10000,20的意思掃瞄滿足條件的10020行,扔掉前面的10000行,返回最後的20行,問題就在這裡

利用表的覆蓋索引來加速分頁查詢

我們都知道,利用了索引查詢的語句中如果只包含了那個索引列(覆蓋索引),那麼這種情況會查詢很快。

在我們的例子中,我們知道id欄位是主鍵,自然就包含了預設的主鍵索引。現在讓我們看看利用覆蓋索引的查詢效果如何:

這次我們之間查詢最後一頁的資料(利用覆蓋索引,只包含id列),如下:

select id from product limit 866613, 20 0.2秒

那麼如果我們也要查詢所有列,有兩種方法,一種是id>=的形式,另一種就是利用join,看下實際情況:

select * from product where id > =(select id from product limit 866613, 1) limit 20查詢時間為0.2秒,簡直是乙個質的飛躍啊,哈哈

另一種寫法

select * from product a join (select id from product limit 866613, 20) b on a.id = b.id查詢時間也很短,贊!

eg1: 從info表name欄位中查詢以l開頭的記錄 

select

*from info where name regexp '^l'

; eg2: 從info表name欄位中查詢以aaa開頭的記錄

select

*from info where name regexp '

^aaa

';

eg1: 從info表name欄位中查詢以c結尾的記錄 

select

*from info where name regexp 'c$'

; eg2: 從info表name欄位中查詢以aaa結尾的記錄

select

*from info where name regexp '

aaa$

';

eg1: 從info表name欄位中查詢以l開頭y結尾中間有兩個任意字元的記錄 

select

*from info where name regexp '

^l..y$

';

eg1: 從info表name欄位中查詢包含c、e、o三個字母中任意乙個的記錄 

select

*from info where name regexp '

[ceo]';

eg2: 從info表name欄位中查詢包含數字的記錄

select

*from info where name regexp '

[0-9]';

eg3: 從info表name欄位中查詢包含數字或a、b、c三個字母中任意乙個的記錄

select

*from info where name regexp '

[0-9a-c]

';

eg1: 從info表name欄位中查詢包含a-

w字母和數字以外字元的記錄

select

*from info where name regexp '

[^a-w0-9]

';

eg1: 從info表name欄位中查詢包含'ic'

的記錄

select

*from info where name regexp 'ic'

; eg2: 從info表name欄位中查詢包含ic、uc、ab三個字串中任意乙個的記錄

select

*from info where name regexp '

ic|uc|ab

';

eg1: 從info表name欄位中查詢c之前出現過a的記錄 

select

*from info where name regexp '

a*c';

eg1: 從info表name欄位中查詢c之前出現過a的記錄 

select

*from info where name regexp '

a+c';(注意比較結果!)

eg1: 從info表name欄位中查詢出現過a3次的記錄 

select

*from info where name regexp '

a';

eg1: 從info表name欄位中查詢ab出現最少1次最多3次的記錄 

select

*from info where name regexp '

ab';

`select

*from a1 where name like

binary` `'

%j%'` `#使用like+

萬用字元匹配大寫j`

`select

*from a1 where name regexp binary` `'

j'` `#使用正則匹配小寫j`

參考文章:

MySQL分頁limit速度太慢的優化方法

在我們使用查詢語句的時候,經常要返回前幾條或者中間某幾行資料,這個時候怎麼辦呢?不用擔心,mysql已經為我們提供了這樣乙個功能。select from table limit offset,rows rows offset offset limit 子句可以被用於強制 select 語句返回指定的...

mysql分頁limit 優化

mysql的分頁比較簡單,只需要limit offset,length就可以獲取資料了,但是當offset和length比較大的時候,mysql明顯效能下降 1.子查詢優化法 先找出第一條資料,然後大於等於這條資料的id就是要獲取的數 缺點 資料必須是連續的,可以說不能有where條件,where條...

Mysql分頁LIMIT分析

表結構 select id from table limit 2,4 返回結果 3,4,5,6 select id from table limit 3,4 返回結果 4,5,6,7 select id from table limit 3,5 返回結果 4,5,6,7,8 由以上結果可分析得到論 ...