《Mysql學習在MySQL中使用LIMIT進行分頁的方法》要點:
本文介紹了Mysql學習在MySQL中使用LIMIT進行分頁的方法,希望對您有用。如果有疑問,可以聯系我們。
本日看一個水友說他的MySQL現在變的很慢.問什么情況時.說單表超過2個G的一個MyISAM.真垃圾的回答方式.MYSQL應用
??? 簡單答復:換一個強勁的服務器.換服務器很管用的:)MYSQL應用
………
?????? 最終讓取到慢查詢:
?MYSQL應用
SELECT * FROM pw_gbook WHERE uid='N' ORDER BY postdate DESC LIMIT N,N; SELECT * FROM pw_gbook WHERE uid='N' ORDER BY postdate DESC LIMIT N,N;
如:
???MYSQL應用
SELECT * FROM pw_gbook WHERE uid='48' ORDER BY postdate DESC LIMIT 1275480,20; SELECT * FROM pw_gbook WHERE uid='48' ORDER BY postdate DESC LIMIT 1275480,20;
??????? 看到這個語句我都吐血了(BT的PHPWIND分頁啊,這個語句是PHP初學者寫出來的還正常,但PHPWIND那么成熟的社區了還有這樣的問題).
??????? 我這里簡單說一下LIMIT的原理.這里以LIMIT N,M為基礎:LIMIT首先要找查N+M行,然后從N行處,取M行.那么這樣的SQL對一次查詢1275500一個操作應該是一個昂貴的開銷.對于LIMIT這類的優化,第一個目標便是讓N變的盡可能的小或是不用.
???? 怎么才能使這個N盡可能小呢.我們能做的其實便是用相對的值,給分頁一個提示.如現在我們看的是第5頁,看完看想看第6頁,第6頁同樣顯示是20條記錄.我們就可以想到,以這個例子為準:我們可以肯定的是第6頁的日值應小于第5頁的,如果第5頁的最小日值為:2009-11-4,那我們就可以用:
????MYSQL應用
SELECT * FROM pw_gbook WHERE uid='48' and postdate<'2009-11-1' ORDER BY postdate DESC LIMIT 20; SELECT * FROM pw_gbook WHERE uid='48' and postdate<'2009-11-1' ORDER BY postdate DESC LIMIT 20;
這樣來查詢第6頁的內容.同樣對于查看第4頁的內容(假設第5頁的最大日期為:2009-11-3)則第4頁的內容為:
?MYSQL應用
SELECT * FROM pw_gbook WHERE uid='48' and postdate>'2009-11-3' ORDER BY postdate DESC LIMIT 20; SELECT * FROM pw_gbook WHERE uid='48' and postdate>'2009-11-3' ORDER BY postdate DESC LIMIT 20;
???????? 這是一個基本的思想.接下來討論一下怎么展現的問題.MYSQL應用
???????? 再說一下這種業務的SQL怎么實現:對于分頁的展示可以用多用類型.這里說三種常用的類型:MYSQL應用
第一種:顯示“上一頁” “下一頁”這種類型MYSQL應用
???????? 這種方式相對簡單也就呈現了我們看到那種SQL不思考的寫法.合理的做法:MYSQL應用
???????? 第一頁:
?????MYSQL應用
SELECT * FROM pw_gbook WHERE uid='48' ORDER BY postdate DESC LIMIT 20; SELECT * FROM pw_gbook WHERE uid='48' ORDER BY postdate DESC LIMIT 20;
???????? 第二頁:根據第一頁的postdate進行查詢如:
????? SELECT * FROM pw_gbook WHERE uid='48'? and postdate<'2009-11-3'? ORDER BY postdate DESC LIMIT? 20;
?
????? SELECT * FROM pw_gbook WHERE uid='48'? and postdate<'2009-11-3'? ORDER BY postdate DESC LIMIT? 20;MYSQL應用
???????? 為什么說這個簡單呢,這個不存在跳頁的問題.接下來這種就存在一個跳頁的問題了.MYSQL應用
第二種:顯示 “ 1,2,3,4,5…”MYSQL應用
???????? 第一頁: 還是以第一頁的方式實現:
????????MYSQL應用
SELECT * FROM pw_gbook WHERE uid='48' ORDER BY postdate DESC LIMIT 20; SELECT * FROM pw_gbook WHERE uid='48' ORDER BY postdate DESC LIMIT 20;
???????? 第二頁:和本來一樣.如果跳頁,如從第二頁跳到第5頁,這里有一個第二頁的最小日期為:2009-11-3(假設值,可以由第二頁的程序查詢得到),第二到第5,差2頁,每頁20條記錄,那么就可以用:
MYSQL應用
SELECT * FROM pw_gbook WHERE uid='48' and postdate<'2009-11-3' ORDER BY postdate DESC LIMIT 40,20; SELECT * FROM pw_gbook WHERE uid='48' and postdate<'2009-11-3' ORDER BY postdate DESC LIMIT 40,20;
??????? 看到這里明白為什么大型網站的分頁不是一下標識出來完了,讓都能點了吧.也不會給你一個框讓你輸入一個頁跳過去了.如果跳的頁面過多,也就存在N值過大的問題了.所以要想方法必免.MYSQL應用
第三種:顯示 “1,2,3,4,5,…. 末頁” 或是 “首頁,<<100,101,102,103 >>末頁”MYSQL應用
這里有一個特殊的一處所:MYSQL應用
《Mysql學習在MySQL中使用LIMIT進行分頁的方法》是否對您有啟發,歡迎查看更多與《Mysql學習在MySQL中使用LIMIT進行分頁的方法》相關教程,學精學透。維易PHP學院為您提供精彩教程。