為什么大網(wǎng)站的百度快照更新速度慢還排第一廣告公司名稱
一、什么是?MySQL大數(shù)據(jù)量分頁查?
MySQL大數(shù)據(jù)量分頁查?是指在使用MySQL數(shù)據(jù)庫時,將大量數(shù)據(jù)分成多個較小的部分進行顯示,以提高查詢效率和用戶體驗。分頁查詢通常用于網(wǎng)頁或應(yīng)用程序中,以便用戶能夠逐步瀏覽結(jié)果集。
二、為什么要用MySQL大數(shù)據(jù)量分頁?
隨著業(yè)務(wù)的增長,數(shù)據(jù)庫的數(shù)據(jù)也呈指數(shù)級增長,之前所寫的代碼mysql的分頁都是采用的limit方式進行,這種方式固然代碼比較簡單,但數(shù)據(jù)量大了之后真的是查的慢。
所以就用到mysql大數(shù)據(jù)量后的分頁查詢方法及其優(yōu)化技巧,不但提高性能還能增加用戶體驗。
1.直接使用數(shù)據(jù)庫提供的SQL語句
SELECT *FROM 表名稱 LIMIT M,N
Limit限制的是從結(jié)果集的M位置處取出N條輸出,其余拋棄,語句的查詢時間與起始記錄的位置成正比,適用于數(shù)據(jù)量較少的情況(元組百/千級),全表掃描,速度會很慢 且有的數(shù)據(jù)庫結(jié)果集返回不穩(wěn)定
2.建立主鍵或唯一索引, 利用索引
SELECT id FROM 表名稱 WHERE id>(pageNum*10)LIMIT M
適用于數(shù)據(jù)量多的情況(元組數(shù)上萬),索引掃描,速度會很快,通過主鍵或者索引的方式去查詢可能會出現(xiàn)一個致命的問題就是數(shù)據(jù)查詢出來并不是按照主鍵或者索引排序的,所以會有漏掉數(shù)據(jù)的情況
3.基于索引再排序
SELECT *FROM 表名稱 WHERE id_pK >(pageNum*10) ORDER BY id_pK ASC LIMIT M
適用于數(shù)據(jù)量多的情況(元組數(shù)上萬). 最好ORDER BY后的列對象是主鍵或唯一索引,使得ORDERBY操作能利用索引被消除但結(jié)果集是穩(wěn)定的,索引掃描,速度會很快,這種方式會讓我們的查詢效率得到更大的提升
4.基于索引使用prepare
PREPARE stmt_name FROM SELECT * FROM 表名稱 WHERE id_pk
ORDER BY id_pK ASC LIMIT M
第一個問號表示pageNum,第二個問號表示每頁元組數(shù)
適用于大數(shù)據(jù)量,索引掃描,速度會很快。prepare語句又比一般的查詢語句快一點
?5.利用MySQL支持ORDER操作可以利用索引快速定位部分元組,避免全表掃描。
SELECT * FROM 表名 WHERE id>=780000 ORDER BY id ASC LIMIT 0,20
可以發(fā)現(xiàn)這種效率和上面方法的效率差不多,因為效率的提升的原因都是走id主鍵索引
6.利用"子查詢/連接+索引"快速定位元組的位置,然后再讀取元組?
SELECT * FROM 表名 WHERE id <= (SELECT id 表名 table
ORDER BY id desc
LIMIT ($page-1)*$pagesize
ORDER BY id desc
LIMIT $pagesize
效率較低
總結(jié):
如果對于有where 條件,又想走索引用limit的,必須設(shè)計一個索引,將where 放第一位,limit用到的主鍵放第2位,而且只能select 主鍵!