大表查詢的優化方案

  1. ?單表優化?:

    • ?字段選擇?:盡量使用TINYINTSMALLINTMEDIUMINT作為整數類型,而非INT;如果字段值非負,可以使用UNSIGNED。對于字符串字段,使用枚舉或整數代替字符串類型,使用TIMESTAMP而非DATETIME盡量減少字段數量,建議在20個以內,避免使用NULL字段,因為它們會增加查詢復雜度并占用額外索引空間?。
    • ?索引優化?:索引不是越多越好,應根據查詢需求有針對性地創建。避免在WHEREORDER BY命令中涉及的列建立索引,避免對字段進行NULL值判斷,因為這會導致全表掃描。對于值分布稀疏的字段,如“性別”,不適合建索引。字符字段最好建前綴索引,避免使用主鍵和外鍵,盡量使用多列索引,并刪除不必要的單列索引?。
    • ?查詢優化?:開啟慢查詢日志來找出執行時間較長的SQL語句。避免列運算和復雜的查詢操作,如使用OR而非IN(建議IN的個數控制在200以內)。避免使用函數和觸發器,盡量使用同類型進行比較,避免在WHERE子句中使用!=<>操作符,因為這會導致索引失效?。
  2. ?讀寫分離?:

    • 在高并發場景下,配置MySQL的主從復制,主庫處理寫操作,從庫處理讀操作。在應用層配置負載均衡器,將讀請求分發到多個從庫上,以提升讀性能。確保主從數據同步的及時性和一致性?。
  3. ?分庫分表?:

    • 當單表數據量過大時,考慮分庫分表。垂直拆分是將表按業務模塊或功能拆分到不同的數據庫中;水平拆分是將同一個表的數據按照一定規則(如ID范圍、哈希值)拆分到多個表中,每個表存儲部分數據?。
  4. ?其他優化措施?:

    • ?限定查詢范圍?:使用WHERE子句限定查詢范圍,如時間范圍、ID范圍等。確保查詢條件中的字段被索引覆蓋,減少掃描的數據量?。
    • ?使用合適的存儲引擎?:如MyISAM適合讀密集型操作,而InnoDB適合寫密集型操作。根據具體需求選擇合適的存儲引擎?。
  5. 慢查詢日志,就是查詢花費大量時間的日志,是指mysql記錄所有執行超過long_query_time參數設定的時間閾值的SQL語句的日志,以幫助開發者分析和優化數據庫查詢性能。默認情況下,慢查詢日志是關閉的,要使用慢查詢日志功能,首先要開啟慢查詢日志功能。
  6. 如何定位慢SQL?
    執行 SHOW PROFILE 命令時,它會顯示關于服務器線程執行的詳細信息,包括每個線程所執行的每個語句的執行時間、I/O 操作、上下文切換等。

    注意:通常在開發和問題診斷期間使用,而不是在生產環境中持續啟用。

    性能開銷:SHOW PROFILE功能在啟用時會對服務器的性能產生額外負擔。每當一個查詢執行時,MySQL服務器會收集詳細的性能信息,包括CPU時間、等待時間、上下文切換次數等。這些信息的收集和存儲會消耗額外的CPU和內存資源,這在高并發的生產環境中可能是不可接受的。

    -- 啟用性能監控
    mysql> set profiling=1;
    -- 執行SQL
    mysql> SELECT ?* ?from ?member

    -- 性能分析
    mysql> show profiles;

五大SQL優化技巧,助你輕松提升數據庫查詢效率

1. 使用適當的索引

應用場景: 在一個包含大量數據的表中,頻繁查詢特定列上的數據。

2. 避免SELECT *

應用場景: 在大表中只需要查詢部分列的數據。

3. 批量操作替代逐行處理

應用場景: 對大量數據進行更新或插入操作。

4. 使用EXISTS替代IN

應用場景: 檢查某個表中的數據是否存在于另一個表中。

5. 正確使用JOIN和子查詢

應用場景: 多表聯合查詢和復雜查詢。

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

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

相關文章

常見MQ及類MQ對比:Redis Stream、Redis Pub/Sub、RocketMQ、Kafka 和 RabbitMQ

常見MQ及類MQ對比 基于Grok調研 Redis Stream、Redis Pub/Sub、RocketMQ、Kafka 和 RabbitMQ 關鍵點&#xff1a; Redis Pub/Sub 適合簡單實時消息&#xff0c;但不持久化&#xff0c;消息可能丟失。Redis Stream 提供持久化&#xff0c;適合需要消息歷史的場景&#xff0c;但…

DAPP實戰篇:使用ethersjs連接智能合約并輸入地址查詢該地址余額

本系列目錄 專欄:區塊鏈入門到放棄查看目錄-CSDN博客文章瀏覽閱讀400次。為了方便查看將本專欄的所有內容列出目錄,按照順序查看即可。后續也會在此規劃一下后續內容,因此如果遇到不能點擊的,代表還沒有更新。聲明:文中所出觀點大多數源于筆者多年開發經驗所總結,如果你…

庫magnet使用指南

Magnet 多線程控制庫使用指南 目錄 庫功能概述環境配置核心類與接口基礎使用示例代碼生成工具高級功能與改進建議完整示例代碼常見問題解答 https://blink.csdn.net/details/1872803?spm1001.2014.3001.5501 1. 庫功能概述 Magnet 庫提供以下核心功能&#xff1a; 多線程…

SpringCloud-快速通關(三)

SpringCloud-快速通關(一) SpringCloud-快速通關(二) SpringCloud-快速通關(三) SpringCloud-快速通關(三) 七、Seata - 分布式事務7.1、環境搭建7.1.1、簡介7.1.2、環境搭建7.1.3、seata-server7.1.4、微服務配置7.1.5、測試7.2、事務模式7.2.1、AT模式7.2.2、XA模式…

STM32 TDS+溫度補償

#define POLAR_CONSTANT (513385) /* 電導池常數&#xff0c;可通過與標準TDS測量儀對比計算反推 */ #define TDS_COEFFICIENT (55U) /* TDS 0.55 * 電子傳導率*/void TDS_Value_Conversion() {u32 ad0;u8 i;float compensationCoefficient;float compens…

數據分析實戰案例:使用 Pandas 和 Matplotlib 進行居民用水

原創 IT小本本 IT小本本 2025年04月15日 18:31 北京 本文將使用 Matplotlib 及 Seaborn 進行數據可視化。探索如何清理數據、計算月度用水量并生成有價值的統計圖表&#xff0c;以便更好地理解居民的用水情況。 數據處理與清理 讀取 Excel 文件 首先&#xff0c;我們使用 pan…

離線環境下docker啟動springboot項目

Docker linux 離線部署springboot 搭建dcoker環境 1. 首先在有網絡的機器上下載Docker的離線安裝包&#xff1a; - 訪問 https://download.docker.com/linux/static/stable/x86_64/ - 下載對應版本的 docker-<version>.tgz 文件 2. 將下載的安裝包傳輸到目標Linux機器上…

分布式專題-Redis Cluster集群運維與核心原理剖析

一. 哨兵集群與Redis Cluster 架構異同&#xff1a; redis單機內存不會超過10g&#xff0c;如果太大的話bgsave命令的話對單節點壓力過大。 節點多了&#xff0c;之間的通信也會非常緩慢。 redis集群模式下對從節點是沒有讀取操作的&#xff0c;只在主節點進行讀取操作。 哨…

使用 Node.js、Express 和 React 構建強大的 API

了解如何使用 Node.js、Express 和 React 創建一個強大且動態的 API。這個綜合指南將引導你從設置開發環境開始&#xff0c;到集成 React 前端&#xff0c;并利用 APIPost 進行高效的 API 測試。無論你是初學者還是經驗豐富的開發者&#xff0c;這篇文章都適合你。 今天&#…

智慧聲防:構筑海濱浴場安全屏障的應急廣播系

海濱浴場是夏季旅游的熱門目的地&#xff0c;但潮汐變化、離岸流、突發天氣、溺水事故等安全隱患時刻威脅著游客安全。傳統的安全管理依賴人工瞭望和喊話&#xff0c;存在覆蓋范圍有限、響應速度慢等問題。“智慧聲防”應急廣播系統&#xff0c;通過智能化、網絡化、多場景協同…

Redis之緩存穿透

Redis之緩存穿透 文章目錄 Redis之緩存穿透一、什么是緩存穿透&#xff1f;二、緩存穿透常見的解決方案1. 緩存空對象&#xff08;Null Caching&#xff09;2. 布隆過濾器&#xff08;Bloom Filter&#xff09;?3. 互斥鎖&#xff08;Mutex Lock&#xff09;?4. 接口層校驗5.…

【藍橋杯】顏色平衡樹

思路 顏色平衡樹&#xff0c;即子樹中的節點顏色均勻分布。所以要確認一個子樹是否為顏色平衡樹&#xff0c;需要得到它的所有節點的顏色&#xff0c;也就是要深搜它所有的子樹。 這個想法就很標準的啟發式合并了&#xff0c;何為啟發式合并&#xff1f;簡單來說&#xff0c;…

自動化測試工具playwright中文文檔-------14.Chrome 插件

介紹 注意 插件僅在以持久化上下文啟動的 Chrome/Chromium 瀏覽器中工作。請謹慎使用自定義瀏覽器參數&#xff0c;因為其中一些可能會破壞 Playwright 的功能。 以下是獲取位于 ./my-extension 的 Manifest v2 插件背景頁面句柄的代碼示例。 from playwright.sync_api imp…

讓 Python 腳本在后臺持續運行:架構級解決方案與工業級實踐指南

讓 Python 腳本在后臺持續運行&#xff1a;架構級解決方案與工業級實踐指南 一、生產環境需求全景分析 1.1 后臺進程的工業級要求矩陣 維度開發環境要求生產環境要求容災要求可靠性單點運行集群部署跨機房容災可觀測性控制臺輸出集中式日志分布式追蹤資源管理無限制CPU/Memo…

MyBatis 詳解

1. 什么是 MyBatis&#xff1f; MyBatis 是一款優秀的 持久層框架&#xff0c;它通過 XML 或注解配置&#xff0c;將 Java 對象&#xff08;POJO&#xff09;與數據庫操作&#xff08;SQL&#xff09;進行靈活映射&#xff0c;簡化了 JDBC 的復雜操作。 核心思想&#xff1a;S…

循環神經網絡 - 深層循環神經網絡

如果將深度定義為網絡中信息傳遞路徑長度的話&#xff0c;循環神經網絡可以看作既“深”又“淺”的網絡。 一方面來說&#xff0c;如果我們把循環網絡按時間展開&#xff0c;長時間間隔的狀態之間的路徑很長&#xff0c;循環網絡可以看作一個非常深的網絡。 從另一方面來 說&…

GoLand 標紅但程序可正常運行:由符號索引緩存失效引起的假報錯問題

問題描述&#xff1a; 在 GoLand 中&#xff0c;api/tls.go 文件中引用了 api/type.go 中定義的結構體 Options&#xff0c;但 GoLand 把 Options 標紅顯示為未定義&#xff08;undefined symbol&#xff09;&#xff0c;盡管程序實際可以正常編譯和運行&#xff08;go build /…

python-各種文件(txt,xls,csv,sql,二進制文件)讀寫操作、文件類型轉換、數據分析代碼講解

1.文件txt讀寫標準用法 1.1寫入文件 要讀取文件&#xff0c;首先得使用 open() 函數打開文件。 file open(file_path, moder, encodingNone) file_path&#xff1a;文件的路徑&#xff0c;可以是絕對路徑或者相對路徑。mode&#xff1a;文件打開模式&#xff0c;r 代表以…

Uniapp:確認框

目錄 一、 出現場景二、 效果展示三、具體使用 一、 出現場景 在項目的開發中&#xff0c;會經常出現刪除數據的情況&#xff0c;如果直接刪除的話&#xff0c;可能會存在誤刪&#xff0c;用戶體驗不好&#xff0c;所以需要增加一個消息提示&#xff0c;提醒用戶是否刪除。 二…

解密 Vue 打包策略

1. 總體概述 在現代前端開發中&#xff0c;Vue 已成為流行框架之一&#xff0c;開發者通常使用 webpack、vite 或 vue-cli 來構建項目。可能會困惑&#xff1a; 為什么源碼中的資源引用路徑與打包后實際產出的路徑會不一樣&#xff1f;靜態路徑與動態路徑到底如何正確書寫&am…