最近在研究一個SQL的時候,發(fā)現(xiàn)一個有意思的問題。Sql代碼如下:
sql代碼挺長的,我們直接看它的執(zhí)行計劃,把它的執(zhí)行計劃在https://explain.depesz.com/格式化顯示。
通過STATS可以發(fā)現(xiàn),SQL總共執(zhí)行3.2秒,Limit這個操作占用了近1.1秒的時間。這里首先我們對數(shù)據(jù)進行全部排序,排序完后選擇整個記錄的第一行。按道理來說慢應該在排序這個地方,而不應該在limit 1這里。
為了研究這個問題,搜索了一下,發(fā)現(xiàn)stackoverflow中有人提過這類問題。
我按照這個思路,把這個SQL進行了改寫,使用了row_number() OVER()的方式。改寫后代碼如下:
經(jīng)過改寫后的執(zhí)行計劃如下:
查看統(tǒng)計值
幾乎沒有特別高消耗。執(zhí)行時間從3.2秒下降到1.4秒。
當然此類問題還有很多,都是limit 1引起的。我在stackexchange上也發(fā)現(xiàn)了這樣的一個案例。
我們觀察它改寫之前和改寫之后的SQL,整個改寫就是把它變成了子查詢就正常了。這是因為前面的SQL沒有使用上索引,改成子查詢后就使用上了索引。
知乎上也有作者遇到這個問題,并按照這個方式解決了。
https://zhuanlan.zhihu.com/p/45748671
所以說order by Limit n這種寫法是有坑的。如果你發(fā)現(xiàn)它有一些慢,建議進行改寫。
更多精彩干貨分享
點擊下方名片關注
IT那活兒
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://www.ezyhdfw.cn/yun/129792.html
摘要:基本環(huán)境操作系統(tǒng)安裝安裝和安裝時序數(shù)據(jù)庫插件部署實踐時空數(shù)據(jù)庫德哥官網(wǎng)安裝文檔設置實驗下載測試數(shù)據(jù)創(chuàng)建數(shù)據(jù)庫解壓下載文件創(chuàng)建表結構導入數(shù)據(jù)查詢測試注釋數(shù)據(jù)庫啟動連接數(shù)據(jù)庫創(chuàng) 基本環(huán)境 操作系統(tǒng): centOS 7 postGreSQL : 10 timescaleDB : 1.0 + postGreSQL安裝 Centos7 安裝Postgresql10.5和PostGIS times...
摘要:使用數(shù)據(jù)庫會自動的根據(jù)從某幾個片中讀取數(shù)據(jù)。更加詳細的請參考德哥文章 官方地址:https://github.com/postgrespr...關于pathman的原理和優(yōu)化問題,請移步至https://yq.aliyun.com/article... 檢查環(huán)境變量如果直接執(zhí)行psql命令提示command not found則執(zhí)行下面的命令設置環(huán)境變量 root@host# PA...
摘要:場景有這樣一張表,分頁查詢時,第一頁的記錄又出現(xiàn)下第二頁中,總之每一頁會出現(xiàn)之前出現(xiàn)的內(nèi)容。原因是值重復分析在數(shù)據(jù)庫中使用查詢語句第一頁第二頁第三頁查詢結果在第一頁和第二頁出現(xiàn)了重復的記錄。原因的值重復了解決方法用來的字段要保證唯一性。 場景 有這樣一張表,分頁查詢時,第一頁的記錄又出現(xiàn)下第二頁中,總之每一頁會出現(xiàn)之前出現(xiàn)的內(nèi)容。原因是sort值重復 showImg(https://s...
摘要:問題對于小的偏移量,直接使用來查詢沒有什么問題,但隨著數(shù)據(jù)量的增大,越往后分頁,語句的偏移量就會越大,速度也會明顯變慢。優(yōu)化思想避免數(shù)據(jù)量大時掃描過多的記錄解決子查詢的分頁方式或者分頁方式。MySQL的分頁查詢通常通過limit來實現(xiàn)。 MySQL的limit基本用法很簡單。limit接收1或2個整數(shù)型參數(shù),如果是2個參數(shù),第一個是指定第一個返回記錄行的偏移量,第二個是返回記錄行的最大數(shù)目。...
閱讀 1495·2023-01-11 13:20
閱讀 1853·2023-01-11 13:20
閱讀 1290·2023-01-11 13:20
閱讀 2043·2023-01-11 13:20
閱讀 4244·2023-01-11 13:20
閱讀 2959·2023-01-11 13:20
閱讀 1583·2023-01-11 13:20
閱讀 3861·2023-01-11 13:20