POSTGRESQL SQL 語句案例,一場由LIMIT 1 引發的“奇怪異像”
最近一段工作很少最佳化SQL ,實際
上7-8年前的確有一段瘋狂最佳化的“美好時光”。 最近一個同事提出一個問題,他的一個POSTGRESQL 的SQL 在執行中因為客戶的需要,將語句新增limit 1 ,但是在新增完畢後,整體語句執行時間超過原有的語句少則9倍,多則20多倍,從不到2秒,變成了23秒。
下面是語句的修改版,不少部分已經改名了。
REPLACE ( REPLACE ( REPLACE ( REPLACE ( ticket_code_serials, '["', '' ), '"]', '' ), '"', '' ), ',', ';' ) AS ticket_code,
由於語句是否的複雜,如果要非常的明白的分析出來,則需要很長的時間,實際上抓住了兩點
1 複雜的語句如果使用了limit 1,需要注意在POSTGRESQL 13中的語句是否還能透過最佳化器,優先判斷對資料進行大表過濾,由於使用LIMIT 1 這樣的語句,導致語句最佳化和執行系統對於提取的資料的有序性判斷過於複雜,導致最佳化器,按照語句的撰寫方式進行了資料的執行,保證提取資料的優秀和有效性,同時多個不同表的欄位最終進行排序,加重了執行分析器的負擔,導致執行分析器躺平,做了保守的執行計劃的操作。
2 業務邏輯是否需要對於LIMIT 1 的語句進行排序的分析,這點非常有必要,在語句的執行中大部分語句的撰寫尤其類似這樣OLAP 很重的語句一般都帶有排序,但是如果只是在結果中取一個結果 limit 1 則是否有必要進行排序這點非常有必要進行確認。一般根據語句的邏輯,是沒有必要進行排序在LIMIT 1,因為你是隨機取和順序是無關的。
這個語句實際上最後最佳化的手段就是去掉ORDER BY ,最終去掉後比原先的同樣的條件,執行的效率提高了 62倍,在 150毫秒左右就將結果計算出來,同時還有一個因素是如果你在撰寫語句的時候帶有LIMIT 1 則POSTGRESQL 的最佳化器會優先選擇計算成本中,第一個啟動成本較低的執行計劃而不是整體成本較低的執行計劃,所以建議在一些語句中,考慮業務的需求的情況下,分析是否有必要進行排序,慎用在複雜語句中的排序導致的執行效率低下的問題。
另外這裡還有一個在使用LIMIT 1 後導致的PG執行計劃的傾向性的問題,你造嗎 !
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024420/viewspace-2938247/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- postgresql dba常用sql查詢語句SQL
- 一個UPDATE語句引發的血案
- [20181120]奇怪的insert語句.txt
- 一場由postcss-bem引發的血案CSS
- MySQL 中 一條 order by index limit 語句的分析MySqlIndexMIT
- 【高併發】由InterruptedException異常引發的思考Exception
- 一場 Kafka CRC 異常引發的血案Kafka
- SQL優化之limit 1SQL優化MIT
- SQL 常用語句一覽SQL
- 【轉】LINQ to SQL語句(1)之WhereSQL
- 兩個看似奇怪的MySQL語句問題MySql
- Java中如何解析SQL語句、格式化SQL語句、生成SQL語句?JavaSQL
- SQL語句SQL
- PostgreSQL與Oracle的sql差異SQLOracle
- SQL語句IN的用法SQL
- MySQL入門---(一)SQL的DDL語句MySql
- 由一個emoji引發的思考
- MySQL:一個奇怪的hang案例MySql
- PostgreSQL 原始碼解讀(18)- 查詢語句#3(SQL Parse)SQL原始碼
- SQL優化案例-單表分頁語句的優化(八)SQL優化
- 【SQL】9 SQL INSERT INTO 語句SQL
- 【SQL】10 SQL UPDATE 語句SQL
- 【SQL】11 SQL DELETE 語句SQLdelete
- SQL SELECT 語句SQL
- sql常用語句SQL
- [20181114]一條sql語句的優化.txtSQL優化
- 一些sql語句的關鍵詞SQL
- 一條sql語句的執行過程SQL
- 常用SQL語句1-增刪改查SQL
- 一場由AI引發的GPU血案,AMD還有機會嗎?AIGPU
- PostgreSQL、KingBase 資料庫 ORDER BY LIMIT 查詢緩慢案例SQL資料庫MIT
- 一場由React引發的前後端分離架構的思考React後端架構
- MySQL的一些常用的SQL語句整理MySql
- 騰訊雲TDSQL PostgreSQL版 -最佳實踐 |優化 SQL 語句SQL優化
- SQLSERVER 語句交錯引發的死鎖研究SQLServer
- Python 資料分析:讓你像寫 Sql 語句一樣,使用 Pandas 做資料分析PythonSQL
- 執行一條 SQL 語句,期間發生了什麼?SQL
- 一條update SQL語句是如何執行的SQL