mysql的分頁查詢

為什么80%的碼農都做不了架構師?>>> ??hot3.png

order by case when 的用法(實現特殊情況的排序,如leader=1的排最前面):

select * from m_worker_project order by CASE WHEN leader = 1 THEN 100 ELSE 1000 END

項目中的動態查詢語句(參數是對象)、模糊查詢(變量格式'%${workerName}%')、特殊排序:?

<select id="findAllWorkerByWhere" resultMap="WorkerMap">
select * ,(select count(*) from m_worker_project where 1=1
<if test="projectWorktypeId>0">
and project_worktype_id=#{projectWorktypeId} 
</if>
) as 'count' from m_worker_project where 1=1<if test="workerName != null and workerName!=''">
and worker_name like '%${workerName}%'
</if>
<if test="projectWorktypeId>0">
and project_worktype_id=#{projectWorktypeId} 
</if>
<if test="id>0">
and id=#{id}
</if>
<if test="1==1">
and deleted=0 
</if>order by CASE WHEN leader = 1 THEN 100 ELSE 1000 END
</select>

?

Mysql的分頁查詢語句的性能分析最基本的分頁方式:

SELECT?...?FROM?...?WHERE?...?ORDER?BY?... LIMIT ...

在中小數據量的情況下,這樣的SQL足夠用了,唯一需要注意的問題就是確保使用了索引:舉例來說,如果實際SQL類似下面語句,那么在category_id, id兩列上建立復合索引比較好:

代碼如下:

SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 50, 10?

---(第一個參數50是偏移量,也就是顯示數據是從查詢結果第51個開始,第二個參數10是每頁顯示10條)

----ORDER BY? ?id? ?DESC(按id降序排列)【ASC是升序排列】

?

子查詢的分頁方式:

隨著數據量的增加,頁數會越來越多,查看后幾頁的SQL就可能類似:

代碼如下:

SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 10

?

一言以蔽之,就是越往后分頁,LIMIT語句的偏移量就會越大,速度也會明顯變慢

此時,我們可以通過子查詢的方式來提高分頁效率,大致如下:

SELECT?*?FROM? ? ?articles?WHERE?id >=

(SELECT?id?FROM?articles?WHERE?category_id = 123?ORDER?BY?id LIMIT 10000, 1) LIMIT 10

?

JOIN分頁方式

SELECT?*?FROM?`content`?AS? ?t1

JOIN?(SELECT?id?FROM?`content`?ORDER?BY?id?desc?LIMIT?".($page-1)*$pagesize.", 1)?AS?t2?

WHERE?t1.id <= t2.id?ORDER?BY?t1.id?desc?LIMIT $pagesize;

?

經過我的測試,join分頁和子查詢分頁的效率基本在一個等級上,消耗的時間也基本一致。 explain SQL語句:

id select_type?table?type possible_keys?key?key_len ref?rows?Extra

?PRIMARY?<derived2> system?NULL?NULL?NULL?NULL?1

?PRIMARY?t1 range?PRIMARY?PRIMARY?4?NULL?6264 Using?where

?DERIVED content?index?NULL?PRIMARY?4?NULL?27085 Using?index

?

那就直接用子查詢語句!

為什么會這樣呢?因為子查詢是在索引上完成的,而普通的查詢時在數據文件上完成的,通常來說,索引文件要比數據文件小得多,所以操作起來也會更有效率。

實際可以利用類似策略模式的方式去處理分頁,比如:判斷如果是一百頁以內,就使用最基本的分頁方式,大于一百頁,則使用子查詢的分頁方式。

?

?

轉載于:https://my.oschina.net/8824/blog/2413611

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537564.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537564.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537564.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

.describe() python_python的apply應用:一般性的“拆分-應用-合并”,附加詳細講解

跟aggregate一樣&#xff0c;transform也是一個有著嚴格條件的特殊函數&#xff1a;傳入的函數只能產生兩種結果&#xff0c;要么產生一個可以傳播的標量值(如np.mean)&#xff0c;要么產生一個相同大小的結果數組。最一般化的GroupBy方法是apply&#xff0c;apply會將待處理的…

DNS服務(4)Slave DNS及高級特性

為了簡化運維人員的負擔&#xff0c;使用Master/Slave DNS架構的情況比較好&#xff0c;現在我們來簡單敘述一下Master/Slaver DNS的特點主DNS服務器&#xff1a;維護所負責解析的域內解析庫服務器&#xff1b;解析庫由管理員維護&#xff1b;從DNS服務器:從主DNS服務器或其它的…

python運算符_Python運算符總結

建議&#xff1a;字符串拼接操作盡量多用join&#xff0c;而減少用”“ join操作時會先計算字符操作所用到的空間總和大小&#xff0c;然后申請內存。然后進行字符串連接操作。所以join的時間復雜的近似O(n)。 操作符連接操作符時&#xff0c;由于字符串是不可變對象&#xff0…

jupyter notebook常用快捷鍵

Jupyter Notebook 有兩種鍵盤輸入模式。編輯模式&#xff0c;允許你往單元中鍵入代碼或文本&#xff1b;這時的單元框線是綠色的。命令模式&#xff0c;鍵盤輸入運行程序命令&#xff1b;這時的單元框線是灰色。 命令模式 (按鍵 Esc 開啟) Enter : 轉入編輯模式Shift-Enter : …

Eclipse安裝試用Hanlp

【1】確定正確安裝配置Java和Eclipse 【2】下載HanLp的各種東西 hanlp.linrunsoft.com/services.ht… 下載這四個文件到本地&#xff0c;我是放在桌面的一個文件夾了。【3】 把jar包導入到Eclipse 在Eclipse先新建一個項目File——New——Java Project--[名字&#xff1a;Hanlp…

升級pip最新版本

python很多庫對pip版本有要求&#xff0c;升級命令為&#xff1a; python -m pip install --upgrade pip windows在cmd下&#xff0c;輸入以上命令

bat 存儲過程返回值_使用Mybatis過程中遇到的坑

常規SSM框架開發中&#xff0c;mybatis遇到的坑是最多的&#xff0c;把以下幾點坑記錄下來防止以后再遇到同樣的情況。1、mybatis 若果在mapper中返回值沒有配置resultMap而是使用resultType直接返回的話&#xff0c;那么當心默認配置中的駝峰匹配規則&#xff0c;參考以下配置…

【洛谷 P2513】 [HAOI2009]逆序對數列(DP)

題目鏈接 這種求方案數的題一般都是\(dp\)吧。 注意到范圍里\(k\)和\(n\)的范圍一樣大&#xff0c;\(k\)是完全可以更大的&#xff0c;到\(n\)的平方級別&#xff0c;所以這暗示了我們要把\(k\)寫到狀態里。\(f[i][j]\)表示前\(1\)~\(i\)的排列逆序對數為\(j\)的方案數。 現在考…

think python下載 中文版開源!這或許是最經典的編程教材

《Think Python》是很多Python初學者的不二入門教材&#xff0c;受到廣泛好評。該書原作者是美國Olin工程學院的教授Allen B. Downey&#xff0c;目前該書的原版和中文版本都已免費開源。 中文版本譯者是一名自學Python的編程愛好者。選擇翻譯《Think Python》&#xff0c;一是…

datatable的數據進行組內排序_排序算法學習分享(四)希爾排序

排序&#xff0c;也稱為排序算法&#xff0c;可以說是我們學習算法的過程中遇到的第一個門檻&#xff0c;也是實際應用中使用得較為頻繁的算法&#xff0c;我將自己對所學的排序算法進行一個歸納總結與分享&#xff0c;如有錯誤&#xff0c;歡迎指正&#xff01;排序算法學習分…

jupyter notebook 安裝代碼提示功能

效果 安裝成功后&#xff0c;輸入部分代碼&#xff0c;按 tab 鍵&#xff0c;會提示代碼 安裝步驟 1.安裝nbextensions 從國內的pip鏡像下載快 pip install -i http://pypi.douban.com/simple --trusted-host pypi.douban.com jupyter_contrib_nbextensions jupyter contr…

轉:EL表達式的11個內置對象

原文地址&#xff1a;https://blog.csdn.net/qq_17045385/article/details/54799998 EL是JSP內置的表達式語言 JSP2.0開始&#xff0c;不讓再使用Java腳本&#xff0c;而是使用EL表達式和動態標簽來代替Java腳本 ############EL替代的是<%... %>&#xff0c;也就是說EL只…

python需要配置環境變量嗎_python為什么會環境變量設置不成功

學習python編程&#xff0c;首先要配置好環境變量。本文主要講解python的環境變量配置&#xff0c;在不同版本下如何安裝 Windows 打開Python官方下載網站 https://www.python.org/downloads/release/python-370/ x86:表示是32位電腦 x86-64:表示是64位電腦 目前Python版本分為…

一維數組、二維數組、三維數組、四維數組、多維數組的理解

以圖書館來舉例 一維數組是一條線 二維數組是一頁紙 三維數組是一本書 四維數組是書架 五維數組是圖書室2201&#xff08;好幾個書架&#xff09; 六維數組是圖書館某一層&#xff0c;2樓/3樓&#xff0c;好幾個圖書室 七維數組是整個圖書館 第N維數組是宇宙..................…

線性篩

我就是我&#xff0c;一輩子都學不會線性篩的菜雞 一篇非常好的博客轉載于:https://www.cnblogs.com/yzxverygood/p/9907281.html

在資源使用狀況視圖中查看資源的負荷情況

只有工時類資源才會出現過度分配&#xff0c;因為工時類資源通常指組織內部的人力資源或者機械設備等&#xff0c;這些資源通常都有數量上的瓶頸&#xff0c;也只有工時類資源才會在【資源工作表】中設置它的最大單位和資源可用性&#xff0c;這就限制了它在不同時間段內的可用…

python常用單詞自由且開放_python常用英語單詞詞匯 unit7

1. Darcula IntelliJ IDEA自帶的黑色主題名稱&#xff0c;Android Studio是基于IntelliJ IDEA的。 2. Appearance /prns/ n. 外觀&#xff1b; 3. Custom /kstm/ n. 習慣&#xff1b; 4. UI abbr. 用戶界面&#xff08;user interface&#xff09; 5.Terminate /tmnet/ 終止、結…

2018.10.29-2018.11.4

簡述osi七層模型和TCP/IP五層模型應用層OSI 參考模型中最靠近用戶的一層&#xff0c;是為計算用戶提供應用接口&#xff0c;也為用戶直接提供網絡服務。常見的應用層網絡服務協議有&#xff1a;HTTP,HTTPS,FTP,POP3,SMTP等表示層表示提供各種用于應用層數據編碼和轉換功能&…

CSV文件轉Excel后數字自動轉換成科學計數法的解決方法

CSV文件用Excel打開后&#xff0c;長度超過11位的數字自動轉換成科學計數法顯示&#xff0c;末尾數字變成“0000”&#xff0c;如何解決這一問題&#xff1f; 以“老勞模系統數據.CSV”為例&#xff0c;身份證碼是科學計數法了 第一步&#xff1a;新建excel&#xff0c;用 off…

python 小說 云_python小說網站

廣告關閉 騰訊云11.11云上盛惠 &#xff0c;精選熱門產品助力上云&#xff0c;云服務器首年88元起&#xff0c;買的越多返的越多&#xff0c;最高返5000元&#xff01; python爬蟲之小說網站--下載小說(正則表達式)思路:1. 找到要下載的小說首頁,打開網頁源代碼進行分析(例:htt…