mysql分頁時offset過大的Sql最佳化經驗分享
發現問題
當我們展示一個列表中的內容時,難免會遇到分頁問題,因為列表中的內容數量可能很多,但是使用者能一次看到的介面大小是有限的,不可能一個介面展示所有的內容,從後端一次性取太多的資料也會給後端造成額外的壓力。
通常分頁查詢的時候會使用這樣的語句:
?
SELECT * FROM table where condition1 = 0 and condition2 = 0 and condition3 = -1 and condition4 = -1 order by id asc LIMIT 2000 OFFSET 50000
|
當offset特別大時,這條語句的執行效率會明顯減低,而且效率是隨著offset的增大而降低的。
原因為:
MySQL並不是跳過offset行,而是取offset+N行,然後返回放棄前offset行,返回N行,當offset特別大,然後單條資料也很大的時候,每次查詢需要獲取的資料就越多,自然就會很慢。
最佳化方案:
?
SELECT * FROM table JOIN ( select id from table where condition1 = 0 and condition2 = 0 and condition3 = -1 and condition4 = -1 order by id asc LIMIT 2000 OFFSET 50000) as tmp using(id)
|
或者
?
SELECT a.* FROM table a, ( select id from table where condition1 = 0 and condition2 = 0 and condition3 = -1 and condition4 = -1 order by id asc LIMIT 2000 OFFSET 50000) b where a.id = b.id
|
先獲取主鍵列表,再透過主鍵查詢目標資料,即使offset很大,也是獲取了很多的主鍵,而不是所有的欄位資料,相對而言效率會提升很多。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對指令碼之家的支援。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2459/viewspace-2805033/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL分頁查詢offset過大,Sql最佳化經驗MySql
- mysql分頁-limit offset分頁MySqlMIT
- 最佳化mysql的limit offset的例子MySqlMIT
- mysql建表常用sql語句個人經驗分享MySql
- 一份經過時間檢驗的 Laravel PHPUnit 測試經驗分享LaravelPHP
- MySql/Oracle和SQL Server的分頁查MySqlOracleServer
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- MYSQL效能最佳化分享(分庫分表)MySql
- 6條經過驗證的創業經驗分享創業
- 分享5款經過時間驗證的精品軟體
- SQL 分頁儲存過程SQL儲存過程
- SQL最佳化案例-單表分頁語句的最佳化(八)SQL
- MySQL從庫維護經驗分享MySql
- 過來人的自學python經驗分享Python
- MySQL 分表最佳化試驗程式碼MySql
- 在大資料情況下MySQL的一種簡單分頁最佳化方法大資料MySql
- SQL最佳化 | MySQL問題處理案例分享三則MySql
- Android大廠面試經驗分享Android面試
- 張翼:Spark SQL在攜程的實踐經驗分享!SparkSQL
- 華為 OD 過了,經驗貼分享
- 得物面試:MySQL 深度分頁如何最佳化?面試MySql
- 經驗分享
- mysql count函式與分頁功能極限最佳化MySql函式
- LayaNative打包iOS-APP過審經驗分享!iOSAPP
- 提高mysql千萬級大資料SQL查詢優化30條經驗(Mysql索引優化注意)MySql大資料優化索引
- Laplace分佈運算元開發經驗分享
- 分散式任務排程內的 MySQL 分頁查詢最佳化分散式MySql
- 技術分享 | SQL 最佳化:ICP 的缺陷SQL
- 分享一次排查CLOSE_WAIT過多的經驗AI
- MySQL的分頁查詢MySql
- Java Agent場景效能測試分析最佳化經驗分享Java
- 過來人的大資料學習經驗大資料
- 一文徹底弄懂MySQL最佳化之深度分頁MySql
- MySQL 百萬級資料量分頁查詢方法及其最佳化MySql
- OceanBase金融SQL、億萬級別據量最佳化案例(Row_number 開窗 + 分頁SQL)SQL
- 千萬級資料深分頁查詢SQL效能最佳化實踐SQL
- MySQL工作經驗MySql
- golang通過mysql語句實現分頁查詢GolangMySql