最近做的一個網站谷歌站長工具提示sitemap訪問超時,這是為毛原因呢?之前不是好好的麼?進入mysql發現某個進程等待時間比較長,進一步發現原來是這樣分頁的mysql語句,因為文章比較多,而且是直接生成xml文件,全部籠統第調出所有文章aid,然後由php組和生成sitemap,我的分頁mysql,類似如下:
select id,title from collect limit 1000,10; 很快;基本上0.01秒就OK
select id,title from collect limit 90000,10; 從9萬條開始分頁,結果?
select aid from articles order by aid limit 80000,4000
當然,前面幾頁數據還挺快的,上了一二十頁後,等待的時間特別長。
最終優化如下:
select aid from articles where aid >=(select aid from articles order by aid limit 80000,1) order by aid desc limit 4000
這樣一來,效率瞬間提高。有木有?必須得有阿。
最後做個小總結:直接用limit分頁查詢,在數據量較小的情況下那是相當給力,隨著翻頁到後面,效率瞬間下降,於是用上面第二句可解決問題。此兩句結合使用,將是天下無雙了吧。
補充:子查詢用了join來優化
select id , login_name , password from user join (select id from user order by login_name limit 200000 , 10) as user2 using(id);
用了0.5x秒
explain 上述
三次查詢
1,using index 的limit
2,沒看懂,可能是join的過程
3, 主鍵in查詢 10條,飛快