關于mysql的事務和索引

1. 事務四大特性(ACID)

  • 原子性:事務的操作要么全部成功,要么全部失敗回滾,不可分割。

  • 一致性:事務執行前后,數據必須滿足業務規則(如賬戶總額不變)。

  • 隔離性:多個并發事務之間互不干擾。

  • 持久性:事務提交后,對數據的修改永久保存,即使系統故障也不丟失。

2. 并發事務的問題

  • 臟讀:讀到其他事務未提交的數據,可能被回滾。

  • 不可重復讀:同一事務內多次讀取同一數據,結果不一致(數據被其他事務修改)。

  • 幻讀:同一事務內多次查詢同一范圍,結果集不同(其他事務新增或刪除了數據)。

3. 索引優缺點

  • 優點

    • 大幅提高查詢速度(尤其WHERE、JOIN、ORDER BY)。

    • 唯一索引保證數據唯一性。

  • 缺點

    • 占用額外存儲空間。

    • 增刪改操作需維護索引,可能降低寫性能。

    • 不合理的索引設計可能拖慢查詢(如過多索引導致優化器選擇困難)。

4. 索引類型

  • 主鍵索引:唯一且非空,表自動創建。

  • 唯一索引:列值唯一,允許NULL。

  • 普通索引:無唯一性約束,加速查詢。

  • 全文索引:支持文本內容的模糊搜索(如LIKE '%keyword%')。

  • 組合索引:多列聯合索引,遵循最左前綴原則。

5. 索引存儲形式分類

聚集索引 : 必須有 ,而且只 有一個

二級索引: 可以存在多個

6. SQL分析工具

  • EXPLAIN:分析執行計劃,關注type(掃描方式)、key(使用的索引)、rows(掃描行數)等字段。

  • 慢查詢日志:記錄執行時間超過閾值的SQL。

  • Profiler工具:如MySQL的SHOW PROFILE,查看SQL執行各階段耗時。

  • 第三方工具:如Percona Toolkit、pt-query-digest分析慢查詢。

7. SQL優化實踐

  • 索引優化

    • 為高頻查詢條件建索引,避免全表掃描。

    • 使用覆蓋索引(索引包含查詢字段,減少回表)。

  • 避免SELECT *:只取必要字段,減少I/O和內存消耗。

  • 分頁優化

    • 大分頁用延遲關聯:SELECT * FROM table JOIN (SELECT id FROM table LIMIT 100000,10) t USING(id)

  • 慎用函數操作索引列:如WHERE YEAR(create_time)=2023改為范圍查詢。

  • JOIN替代子查詢:減少嵌套查詢的臨時表開銷。

  • 事務拆分:大事務拆小,減少鎖競爭和回滾開銷。

  • 定期統計信息更新:如ANALYZE TABLE確保優化器選擇正確索引。

示例場景: 某分頁查詢SELECT * FROM orders LIMIT 100000,10執行緩慢,優化步驟:

  1. 用EXPLAIN發現全表掃描。

  2. 改為覆蓋索引+延遲關聯:

    sql

    復制

    下載

    SELECT * FROM orders ?
    JOIN (SELECT id FROM orders ORDER BY id LIMIT 100000,10) AS tmp ?
    ON orders.id = tmp.id; ?
  3. 執行時間從2秒降至0.1秒。

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

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

相關文章

【Python】保持Selenium穩定爬取的方法(防檢測策略)

selenium 防檢測策略的方法匯總: 合理設置延遲:請求間添加隨機延遲 (2-10秒) 限制爬取頻率:控制每小時/每天的請求量 輪換用戶代理:準備至少10個不同的User-Agent 使用住宅代理:優先選擇高質量的住宅代理IP 處理驗…

SpringSecurity源碼解讀AbstractAuthenticationProcessingFilter

一、介紹 AbstractAuthenticationProcessingFilter 是 Spring Security 框架里的一個抽象過濾器,它在處理基于表單的認證等認證流程時起著關鍵作用。它繼承自 GenericFilterBean,并實現了 javax.servlet.Filter 接口。此過濾器的主要功能是攔截客戶端發送的認證請求,對請求…

什么是DDD?為什么它正在取代傳統架構?

什么是DDD?為什么它正在取代傳統架構? 1. 傳統開發模式的痛點 在經典的MVC架構中,開發流程往往從數據庫表結構設計開始,業務邏輯散落在Service層,隨著需求迭代容易形成「大泥球」代碼: 實體類變成純粹的…

基于外部中中斷機制,實現以下功能: 1.按鍵1,按下和釋放后,點亮LED 2.按鍵2,按下和釋放后,熄滅LED 3.按鍵3,按下和釋放后,使得LED閃爍

題目: 參照外部中斷的原理和代碼示例,再結合之前已經實現的按鍵切換LED狀態的實驗,用外部中斷改進其實現。 請自行參考文檔《中斷》當中,有關按鍵切換LED狀態的內容, 自行連接電路圖,基于外部中斷機制,實現以下功能&am…

在SQL中,FROM子句中的子查詢必須指定別名,即使后續未引用該別名

FROM子句中的子查詢必須指定別名 示例錯誤示例及原因:總結: 在SQL中, FROM子句中的子查詢必須指定別名, 即使后續未引用該別名 示例 查詢館藏圖書最多的作者姓名及館藏數量 SELECT 作者, COUNT(圖書編號) AS 館藏數量 FROM 圖…

問道數碼獸 懷舊劇情回合手游源碼搭建教程(反查重優化版)

本文將對"問道數碼獸"這一經典卡通風格回合制手游的服務端部署與客戶端調整流程進行詳細拆解,適用于具備基礎 Windows 運維和手游源碼調試經驗的開發者參考使用。教程以實戰為導向,基于原始說明內容重構優化,具備較高的內容查重避重…

Shell腳本-for循環應用案例

在Shell腳本編程中,for循環是一種強大的工具,用于處理重復性任務。無論是批量處理文件、遍歷目錄內容還是簡單的計數任務,for循環都能提供簡潔而有效的解決方案。本文將通過幾個實際的應用案例來展示如何使用for循環解決具體的編程問題。 案…

Chrmo手動同步數據

地址欄輸入 chrome://sync-internals分別點擊這2個按鈕即可觸發手動同步

為什么圓形在GeoJSON中被表示為多邊形(Polygon)而不是圓形類型

GeoJSON規范中沒有"圓形"類型 GeoJSON是一種用于表示地理空間數據的標準格式,它的規范中只定義了以下幾種基本幾何類型: Point (點) LineString (線) Polygon (多邊形) MultiPoint (多點) MultiLineString (多線) MultiPolygon (多多邊形) GeometryCollection (幾…

大數據組件學習之--Kafka 安裝搭建

一、前置環境 在搭建kafka之前,請確認自己的hadoop、zookeeper是否搭建完成且可正常運行 二、下載并上傳安裝包(鏈接為百度網盤) kafka安裝包 tar -zxvf /opt/software/kafka_2.12-2.4.1.tgz -C /opt/module/ 進入解壓后的目錄更改文件名…

PyQt6基礎_pyqtgraph_折線圖with縮放調節

目錄 字符型橫坐標代碼 折線圖代碼 運行 創建新類,繼承pg.PlotWidget,在新類中實現業務內容,重寫pg.PlotWidget中的wheelEvent方法并使用業務數據實現比較理想的縮放狀態。 字符型橫坐標代碼 class StrAxisItem(pg.AxisItem):def __init…

聯邦元學習實現個性化物聯網的框架

隨著數據安全和隱私保護相關法律法規的出臺,需要直接在中央服務器上收集和處理數據的集中式解決方案,對于個性化物聯網而言,訓練各種特定領域場景的人工智能模型已變得不切實際。基于此,中山大學,南洋理工大學&#xf…

audio 核心服務AudioPolicyService 和AudioFlinger啟動流程

目錄 1、audioserver啟動 2、AudioPolicyService啟動 3、AudioFlinger啟動 audio的核心服務有兩個,AudioPolicyService 和AudioFlinger他們到在audioserver一個進程中 1、audioserver啟動 設備開機,系統啟動時將執行 /system/etc/init/audioserver.rc…

反爬蟲機制中的驗證碼識別:類型、技術難點與應對策略

在互聯網數據抓取領域,驗證碼識別是爬蟲過程中的關鍵環節之一。下面對常見驗證碼類型、技術難點及應對策略進行詳細解析,并提供多種場景下的代碼實現示例。 一、驗證碼類型與技術難點 (一)圖形驗證碼 1. 字符驗證碼 特征&#…

vue element使用el-table時,切換tab,table表格列項發生錯位問題

展示問題 問題描述:使用el-table的fixed"right"屬性后,如果切換tab時,回出現最后一列錯誤的問題 官網提供解決方法:doLayout 需要注意的事項:我這里是通過組件使用的table組件,涉及多層組件封裝…

示例:Spring JDBC 聲明式事務(xml配置形式)

聲明式事務是指在不修改源代碼的情況下通過配置applicationContext.xml自動實現事務控制,其本質是AOP環繞通知。它的觸發時機為:1、當目標方法執行成功時自動提交事務,2、當目標方法拋出運行時異常時,自動事務回滾 核心步驟示例&a…

在vmware中ubuntu系統因為安裝了docker查不到ip地址

問題截圖: 根據提供的截圖信息,可以明確看到ens33網卡處于**物理連接斷開(NO-CARRIER)且接口關閉(DOWN)**的狀態,這是導致無法獲取IP地址的直接原因。以下是針對VMware虛擬機的具體解決方案&am…

51c大模型~合集121

我自己的原文哦~ https://blog.51cto.com/whaosoft/13869815 #大模型何以擅長小樣本學習? 這項研究給出詳細分析 近年來,大語言模型(LLM)在人工智能領域取得了突破性進展,成為推動自然語言處理技術發展與通用人…

Babylon.js 材質統一轉換指南:將 AssetContainer 中的所有材質轉換為 PBRMetallicRoughnessMaterial

在現代 3D 開發中,基于物理的渲染(PBR)已成為行業標準。本文將詳細介紹如何在 Babylon.js 中將 AssetContainer 加載的各種材質統一轉換為 PBRMetallicRoughnessMaterial,實現項目材質的標準化。 為什么需要材質轉換? PBRMetallicRoughness…

Go slice切片使用教程,一次通關!

簡介 Go 中的 切片(slice) 是 Go 最強大、最常用的數據結構之一。它是對數組的輕量封裝,比數組更靈活,幾乎所有的集合處理都用切片來完成。 什么是切片(slice) 切片是一個擁有 長度(len&…