一次分割槽查詢異常的分析
節前我處理了一個問題。先上圖,可以看出來查詢這個表,有兩個條件,一個是code一個是實際。最終執行查了5000萬行資料。歷時900秒。當然最後也是查了個寂寞,沒查到。
對於5000萬掃查了900秒,這個我既能理解,又不能理解。
能理解的是掃描5000萬用900多秒,說的過去。 不能理解是。從2022年1月開始到現在這個表一共才2億條。 我每月一個分割槽,查詢一個星期,怎麼也在月的分割槽中。那個code的一個星期資料在150萬左右。不應該會查到5000萬。
即使不帶code,一個星期也就700萬。
不過我依然相信這個5000萬是實際發生的。
我當時就想一個月大不了就700萬,要到5000萬,那要8個700萬差不多。
等等,說到這裡,我似乎發現了什麼。七八五十六啊,因為差不多現在這個表也就是八九個分割槽的樣子。
那麼我只查code發現大約4300萬左右。那麼說明在實際查詢過程中,那一個星期資料的code資料,被認為只有一個星期而沒有code。而在這種情況下,一個星期的和平時一個月資料量大致相等,又變成了跨所有分割槽執行。
是不是bug我不好說。因為不是每次都這樣。這情況倒是第一次遇到。在Oracle中只要時間落在一個月度中的,是不會產生跨月度分割槽的。
這可能是最佳化器不同,Oracle最佳化器目前還是最厲害的。
也許看到這裡有人說MySQL的分割槽不好,不過我用到現在也就是這個場景出了跨分割槽的問題。如果時間選擇不是一週,而是3天或者5天,是沒有問題的。或者說一週的資料量和一個月資料量相差很遠,不造成資料庫誤判也是沒有問題的。
MySQL分割槽還是利大於弊。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2917296/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- hibernate異常之--count查詢異常
- 處理動態分割槽時出現的異常
- Laravel Query Builder 複雜查詢案例:子查詢實現分割槽查詢 partition byLaravelUI
- mysql 5.7.11查詢分割槽表的一個問題MySql
- Oracle查詢Interval partition分割槽表內資料Oracle
- 記一次詭異的Oracle查詢轉換Oracle
- PostgreSQL 原始碼解讀(98)- 分割槽表#4(資料查詢路由#1-“擴充套件”分割槽表)SQL原始碼路由套件
- Spark SQL解析查詢parquet格式Hive表獲取分割槽欄位和查詢條件SparkSQLHive
- Windows伺服器如何磁碟分割槽,Windows伺服器磁碟分割槽常見的三種Windows伺服器
- 詭異的”慢查詢“
- Spark 3.0 新特性 之 自適應查詢與分割槽動態裁剪Spark
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- Hive的靜態分割槽與動態分割槽Hive
- 二分查詢常見套路與分析
- Linux分割槽方案、分割槽建議Linux
- 常見的查詢操作
- Flutter 常見異常分析Flutter
- PostgreSQL/LightDB分割槽表之常見問題SQL
- Mybatis實現條件IN查詢(foreach)和invalid comparison異常MyBatis
- PG的非分割槽表線上轉分割槽表
- 一次elasticsearch 查詢瞬間超時案例分析Elasticsearch
- mysql 如何查詢逗號“,”分割的字串MySql字串
- oracle分割槽表和分割槽表exchangeOracle
- PostgreSQL/LightDB 分割槽表之分割槽裁剪SQL
- Linux 分割槽擴容(根分割槽擴容,SWAP 分割槽擴容,掛載新分割槽為目錄)Linux
- 一次ORACLE分散式事務鎖異常處理分析Oracle分散式
- SQL Server大分割槽表沒有空分割槽的情況下如何擴充套件分割槽的方法SQLServer套件
- 記一次分割槽表update調優過程
- HGDB的分割槽表實現SQL Server的分割槽檢視SQLServer
- oracle 分割槽表move和包含分割槽表的lob moveOracle
- 移動分割槽表和分割槽索引的表空間索引
- Oracle分割槽表基礎運維-07增加分割槽(2 HASH分割槽)Oracle運維
- 常見通用的Join查詢
- MySQL的分割槽(一)MySql
- MySQL的分割槽(二)MySql
- linux的分割槽方法Linux
- Flink的分割槽策略
- oracle分割槽表和非分割槽表exchangeOracle