如何減少開發過程中的bug-數據庫篇

1.1慢查詢

1.1.1 是否命中索引

提起慢查詢,我們馬上就會想到加索引。如果一條SQL沒加索引,或者沒有命中索引的話,就會產生慢查詢。

索引哪些情況會失效?

  • 查詢條件包含or,可能導致索引失效

  • 如果字段類型是字符串,where時一定用引號括起來,否則索引失效

  • like通配符可能導致索引失效。

  • 聯合索引,查詢時的條件列不是聯合索引中的第一個列,索引失效。

  • 在索引列上使用mysql的內置函數,索引失效。

  • 對索引列運算(如,+、-、*、/),索引失效。

  • 索引字段上使用(!= 或者 < >,not in)時,可能會導致索引失效。

  • 索引字段上使用is null, is not null,可能導致索引失效。

  • 左連接查詢或者右連接查詢查詢關聯的字段編碼格式不一樣,可能導致索引失效。

1.1.2 數據量大,考慮分庫分表

單表數據量太大,就會影響SQL執行性能。我們知道索引數據結構一般是B+樹。因此,數據量大的時候,建議分庫分表。分庫分表的中間件有mycat、sharding-jdbc。

1.2 死鎖

死鎖是指兩個或多個事務在同一資源上相互占用,并請求鎖定對方的資源,從而導致惡性循環的現象。

暫時無法在飛書文檔外展示此內容

MySQL內部有一套死鎖檢測機制,一旦發生死鎖會立即回滾一個事務,讓另一個事務執行下去。但死鎖有資源的利用率降低、進程得不到正確結果等危害。

1.2.1 9種情況的SQL加鎖分析

要避免死鎖,需要學會分析:一條SQL的加鎖是如何進行的?一條SQL加鎖,可以分9種情況進行探討:

  • 組合一:id列是主鍵,RC隔離級別

  • 組合二:id列是二級唯一索引,RC隔離級別

  • 組合三:id列是二級非唯一索引,RC隔離級別

  • 組合四:id列上沒有索引,RC隔離級別

  • 組合五:id列是主鍵,RR隔離級別

  • 組合六:id列是二級唯一索引,RR隔離級別

  • 組合七:id列是二級非唯一索引,RR隔離級別

  • 組合八:id列上沒有索引,RR隔離級別

  • 組合九:Serializable隔離級別

1.2.2 如何分析解決死鎖?

分析解決死鎖的步驟如下:

  • 模擬死鎖場景

  • show engine innodb status;查看死鎖日志

  • 找出死鎖SQL

  • SQL加鎖分析

  • 分析死鎖日志(持有什么鎖,等待什么鎖)

  • 熟悉鎖模式兼容矩陣,InnoDB存儲引擎中鎖的兼容性矩陣。

1.3 一些SQL的經典注意點

1.3.1 limit大分頁問題

limit大分頁是一個非常經典的SQL問題,我們一般有這3種對應的解決方案

方案一: 如果id是連續的,可以這樣,返回上次查詢的最大記錄(偏移量),再往下limit

 

select id,name from employee where id>1000000 limit 10.

方案二: 在業務允許的情況下限制頁數:

建議跟業務討論,有沒有必要查這么深度的分頁啦。因為絕大多數用戶都不會往后翻太多頁。谷歌搜索頁也是限制了頁數,因此不存在limit大分頁問題。

方案三: 利用延遲關聯或者子查詢優化超多分頁場景。(先快速定位需要獲取的id段,然后再關聯)

 

SELECT a.* FROM employee a, (select id from employee where 條件 LIMIT 1000000,10 ) b where a.id=b.id

1.3.2 修改、查詢數據量多時,考慮分批進行。

我們更新或者查詢數據庫數據時,盡量避免循環去操作數據庫,可以考慮分批進行。比如你要插入10萬數據的話,可以一次插入500條。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43532.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43532.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43532.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LeetCode 0724.尋找數組的中心下標:前綴和(時空復雜度O(n)+O(1))

title: 724.尋找數組的中心下標 date: 2024-07-08 13:22:58 tags: [題解, LeetCode, 簡單, 數組, 前綴和] 【LetMeFly】724.尋找數組的中心下標&#xff1a;前綴和&#xff08;時空復雜度O(n)O(1)&#xff09; 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/find-pi…

數據結構--二叉樹相關習題5(判斷二叉樹是否是完全二叉樹 )

1.判斷二叉樹是否是完全二叉樹 辨別&#xff1a; 不能使用遞歸或者算節點個數和高度來判斷。 滿二叉樹可以用高度和節點來判斷&#xff0c;因為是完整的。 但是完全二叉樹前面是滿的&#xff0c;但是最后一層是從左到右連續這種 如果仍然用這種方法的話&#xff0c;如下圖…

暑期備考2024小學生古詩文大會:吃透真題和知識點(持續)

2024年上海市小學生古詩文大會的自由報名初賽將于10月19日&#xff08;星期六&#xff09;正式開始&#xff0c;還有3個多月的時間。 為幫助孩子們備考&#xff0c;我持續分享往年上海小學生古詩文大會真題&#xff0c;這些題目來自我去重、合并后的1700在線題庫&#xff0c;每…

加密與安全_密鑰體系的三個核心目標之完整性解決方案

文章目錄 Pre機密性完整性1. 哈希函數&#xff08;Hash Function&#xff09;定義特征常見算法應用散列函數常用場景散列函數無法解決的問題 2. 消息認證碼&#xff08;MAC&#xff09;概述定義常見算法工作原理如何使用 MACMAC 的問題 不可否認性數字簽名&#xff08;Digital …

SketchUp Pro 2024:現代科技之詩意體驗

在那遙遠的唐朝&#xff0c;李白曾以詩酒為伴&#xff0c;游歷山川&#xff0c;揮灑才情。而今&#xff0c;若李白穿越時空&#xff0c;手握現代科技之利器——SketchUp Pro 2024&#xff0c;定會以詩意之筆&#xff0c;描繪這款軟件的神奇與魅力。 初識SketchUp Pro 2024 初…

Vue Router:History 模式 vs. Hash 模式

在開發 SPA&#xff08;單頁應用程序&#xff09;時&#xff0c;路由管理是不可或缺的一部分。Vue.js 框架中的 Vue Router 提供了兩種主要的路由模式&#xff1a;History 模式和 Hash 模式。理解這兩種模式的區別及其實現方式&#xff0c;對于開發和部署 Vue 應用至關重要。 …

k8s record 20240708

一、PaaS 云平臺 web界面 資源利用查看 Rancher 5臺 CPU 4核 Mem 4g 100g的機器 映射的目錄是指docker重啟后&#xff0c;數據還在 Rancher可以創建集群也可以托管已有集群 先docker 部署 Rancher&#xff0c;然后通過 Rancher 部署 k8s 想使用 kubectl 還要yum install 安…

如何分析前后端bug?

如何分析前后端bug&#xff0c;我來支你1??招 &#x1f4dd;一般通過查看接口的方式分析前后端bug。 . 【方法】&#xff1a; web項目&#xff0c;用瀏覽器自帶的F12抓包看接口請求。 app客戶端&#xff0c;一般用fiddler等工具進行抓包接口。 . ?用經典的電商項目舉例&…

應用軟件受到網絡攻擊怎么辦?

大家都知道在目前的互聯網社會中&#xff0c;大型的網絡游戲與電商網站企業是網絡攻擊的重要對象&#xff0c;同時軟件應用也無法避免地會受到各種網絡攻擊&#xff0c;那么當我們的軟件應用被攻擊時&#xff0c;該怎么辦呢&#xff1f; 首先我們可以使用高防CDN&#xff0c;安…

2. 年齡問題

年齡問題 題目描述 本題為填空題&#xff0c;只需要算出結果后&#xff0c;在代碼中使用輸出語句將所填結果輸出即可。 S 夫人一向很神秘。這會兒有人問起她的年齡&#xff0c;她想了想說&#xff1a; "2020 年前&#xff0c;我丈夫的年齡剛好是我的 22 倍&#xff0c;…

ATA-8035射頻功率放大器在聲動力療法中的應用

聲動力療法是一種基于聲波能量的治療方法&#xff0c;廣泛應用于醫療和美容領域。它利用高強度聚焦的聲波來實現切割、破碎或加熱組織&#xff0c;以治療各種疾病和美容問題。在聲動力療法中&#xff0c;射頻功率放大器起著至關重要的作用&#xff0c;它負責提供足夠的能量來激…

達夢數據庫的系統視圖v$auditrecords

達夢數據庫的系統視圖v$auditrecords 在達夢數據庫&#xff08;DM Database&#xff09;中&#xff0c;V$AUDITRECORDS 是專門用來存儲和查詢數據庫審計記錄的重要系統視圖。這個視圖提供了對所有審計事件的訪問權限&#xff0c;包括操作類型、操作用戶、時間戳、目標對象等信…

詳解 | 什么是GeoTrust

GeoTrust是一家全球知名的數字證書頒發機構&#xff08;Certificate Authority&#xff0c;簡稱CA&#xff09;&#xff0c;專注于提供SSL/TLS證書和其他相關的網絡安全產品。 1、歷史背景&#xff1a; GeoTrust成立于2001年&#xff0c;最初作為一個獨立的公司運營。2006年&a…

js+spring boot實現簡單前后端文件下載功能

jsboot項目實現自定義下載 一、前端頁面 1、先導入axios的js包 2、注意axios響應的格式&#xff1a;result.data.真實的數據內容 3、這里請求的url就是你boot項目的getMapping的url&#xff0c;保持一致即可 4、如果想在后端設置文件名&#xff0c;那么后端生成后&#xf…

目標檢測算法介紹來了!

隨著人工智能技術的迅猛發展&#xff0c;目標檢測算法在計算機視覺領域扮演著越來越重要的角色。它廣泛應用于安防監控、自動駕駛、醫學影像分析、機器人視覺等多個領域&#xff0c;極大地推動了智能化進程。本文將對目標檢測算法進行深入的探討&#xff0c;包括其基本原理、發…

使用 Streamlit 和 asyncio 模塊進行異步編程

概述 Streamlit 是一個用于構建數據應用程序的強大工具&#xff0c;但它本身并不直接支持異步編程。然而&#xff0c;通過結合 Python 的 asyncio 模塊&#xff0c;我們可以在 Streamlit 應用中實現異步處理&#xff0c;從而提高應用的響應性和效率。 為什么需要異步編程 在…

安卓應用開發學習:騰訊地圖SDK應用改進,實現定位、搜索、路線規劃功能集成

一、引言 我的上一篇學習日志《安卓應用開發學習&#xff1a;通過騰訊地圖SDK實現定位功能》記錄了利用騰訊地圖SDK實現手機定位功能&#xff0c;并能獲取地圖中心點的經緯度信息。這之后的幾天里&#xff0c;我對《Android App 開發進階與項目實戰》一書第九章的內容深入解讀…

【深度學習實戰(44)】Anchor based and Anchor free(無錨VS有錨)

1 anchor-based 深度學習目標檢測通常都被建模成對一些候選區域進行分類和回歸的問題。在單階段檢測器中&#xff0c;這些候選區域就是通過滑窗方式產生的 anchor&#xff1b;在兩階段檢測器中&#xff0c;候選區域是 RPN 生成的 proposal&#xff0c;但是 RPN 本身仍然是對滑窗…

leetcode--層數最深葉子節點的和

leetcode地址&#xff1a;層數最深葉子節點的和 給你一棵二叉樹的根節點 root &#xff0c;請你返回 層數最深的葉子節點的和 。 示例 1&#xff1a; 輸入&#xff1a;root [1,2,3,4,5,null,6,7,null,null,null,null,8] 輸出&#xff1a;15 示例 2&#xff1a; 輸入&#xff…

多點GRE over IPsecVPN模式下nhrp的調優

一、實驗目的 在多點GRE over IPsecVPN模式下對nhrp進行調優&#xff0c;在總部開啟重定向、在分支開啟shortcut 網絡拓撲&#xff1a; 二、基礎設置 &#xff08;一&#xff09;如圖所示配置接口地址和區域&#xff0c;連接PC的接口位于trust區域、連接路由器的接口位于unt…