5.5版本升級5.7.23SQL不相容一例
現象:
公司一業務從5.5升級到5.7.23,業務反饋一SQL,該SQL在兩個版本執行結果不一樣(5.5的返回結果30條,而5.7.23返回57條)
SELECT * from k_xxx where sequence>0 AND starttime<='2019-03-28 18:26:06' and id in (SELECT b.id FROM (SELECT * FROM k_xxx as a WHERE a.status=1 AND a.sequence>0 AND a.starttime<='2019-03-28 18:26:06' ORDER BY a.starttime DESC,a.edittime DESC) as b GROUP BY b.sequence);
分析:
1)拆分sql,理出子查詢如下:
SELECT b.id FROM (SELECT * FROM k_recommend as a WHERE a.status=1 AND a.sequence>0 AND a.starttime<='2019-03-28 18:26:06' ORDER BY a.starttime DESC,a.edittime DESC) ;
發現理出的子查詢在5.5跟5.7.23都是返回30條,由此發現帶in的子查詢可能存在差異
2)檢視5.5版本跟5.7.23的執行計劃
5.5版本
5.7.23版本
由上圖可以得出結論,在mysql5.7.23中,將子查詢最佳化成關聯查詢,在關聯時丟失了對 group by的處理
3)sql整改(將子查詢變為關聯查詢)
select * from (SELECT a.* FROM k_xxx as a inner join k_xxx as b WHERE a.sequence>0 AND a.starttime<='2019-03-28 18:26:06' and a.status=1 and a.id=b.id group by a.sequence order by a.starttime DESC,a.edittime DESC) as b order by b.sequence;
結論:
在升級mysql5.7時,可能要對業務的查詢帶
group
by/order by的子查詢進行改造,方可升級
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30221425/viewspace-2689354/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- CentOS升級MySQL到5.5CentOSMySql
- node 版本升級
- gcc版本升級GC
- NiFi版本升級Nifi
- python版本升級Python
- # Laravel 5.5 升級到 6.0 踩坑記錄Laravel
- 線上環境MySQL5.5升級至5.6MySql
- 如何升級電腦windows版本 windows系統版本升級方法介紹Windows
- Win10怎麼升級版本 Win10升級版本的方法Win10
- YourSQLDba版本升級總結SQL
- GitLab跨版本升級Gitlab
- Redis的跨版本升級Redis
- Homestead 升級PHP版本PHP
- Mac brew 升級 PHP版本MacPHP
- 如何升級fedora的版本
- 升級mac的PHP版本MacPHP
- centos 7 版本升級nginxCentOSNginx
- cassandra升級版本選擇
- nginx 版本升級 轉載Nginx
- Node 快速切換版本、版本回退(降級)、版本更新(升級)
- Mac 升級 PHP 到 7.4 版本MacPHP
- Cocospod 升級到指定版本
- JavaFX桌面應用-版本升級Java
- CentOs下手動升級node版本CentOS
- ThinkPHP升級至 5.1.18 版本PHP
- openssl版本升級操作記錄
- centos 6.7 python 版本升級CentOSPython
- oracle版本升級路線圖Oracle
- nginx升級與版本回退Nginx
- 如何將 Ubuntu 版本升級到新版本Ubuntu
- Laravel 5.5.* 升級到 5.7.* 問題記錄Laravel
- Laravel 5.5 釋出,ThinkSNS+ 升級以及狀況分享。Laravel
- MySQL 5.5升級5.6 單例項簡易實戰MySql單例
- 12. Oracle版本、補丁及升級——12.3. 升級Oracle
- PHP版本升級:從php7.1升級到php7.2PHP
- Oracle升級導致ocr檔案損壞一例Oracle
- 寶塔皮膚版本升級實戰教程—升級寶塔皮膚到最新版本
- centos7 ruby版本過低,升級ruby版本CentOS