七、索引優化分析

来源:https://www.cnblogs.com/lee0527/archive/2020/01/27/12236130.html
-Advertisement-
Play Games

SQL性能下降的原因 查詢語句寫的不好 索引失效 關聯查詢太多 伺服器調優及各個參數的的設置(緩衝、線程數等等) 常見的JOIN查詢 1、SQL的執行順序 手寫的順序: 真正機器執行的順序: 2、七種join查詢 最後兩種語法mysql不支持,但是我們可以用union來聯合其他的查詢結果來拼湊出最終 ...


SQL性能下降的原因

  • 查詢語句寫的不好
  • 索引失效
  • 關聯查詢太多
  • 伺服器調優及各個參數的的設置(緩衝、線程數等等)

常見的JOIN查詢

1、SQL的執行順序

手寫的順序:

真正機器執行的順序:

2、七種join查詢

最後兩種語法mysql不支持,但是我們可以用union來聯合其他的查詢結果來拼湊出最終結果。

索引

1、什麼是索引?

MySQL官方對索引的定義為:索引(Index)是幫助MySQL高效獲取數據的數據結構。

也可以簡單理解為“排好序的快速查找數據結構”

數據本身之外,資料庫還維護著一個滿足特定查找演算法的數據結構,這些數據結構以某種方式指向數據,這樣就可以在這些數據結構的基礎上實現高級查找演算法,這種數據結構就是索引。

一般來說索引本身也很大,不可能全部存儲在記憶體中,因此所以往往以索引文件的形式存儲在磁碟上。

2、索引的優勢和劣勢

優勢

  • 提高了數據檢索的效率,降低了資料庫的IO成本
  • 降低了數據排序的成本,降低了CPU的消耗

劣勢

  • 實際上索引也是一張表,該表保存了主鍵與索引欄位,並指向實體表的記錄,所以索引列也是要占用空間的
  • 雖然索引大大的提高了查詢速度,但同時也會降低更新表的速度,因為進行更新表時,MySQL不僅要保存數據,還要保存一下索引文件每次更新添加了索引列的欄位,都會調整因為更新所帶來的鍵值變化後的索引信息

3、索引的分類

  • 單值索引:即一個索引只包含單個列,一個表可以有多個單值索引
  • 唯一索引:索引列的值必須唯一但允許有空值
  • 複合索引:即一個索引包含多個列

4、基本語法

  • 創建

    CREATE [UNIQUE] INDEX indexName ON table_name(columnname(length))

    ALTER table_name ADD [UNIQUE] INDEX indexName ON (columnname(length))

    如果時CHAR、VARCHAR類型,length可以小於欄位實際長度,如果是BLOB和TEXT類型,必須指定length

  • 刪除

    DROP INDEX [indexName] ON table_name

  • 查看

    SHOW INDEX FROM table_name

5、哪些情況需要創建索引?

  • 主鍵自動建立唯一索引
  • 頻繁作為查詢條件的欄位應該創建索引
  • 查詢中與其他表關聯的欄位,外鍵關係建立索引
  • 頻繁更新的欄位不合適創建索引
  • Where條件里用不到的欄位不創建索引
  • 在高併發下傾向創建組合索引
  • 查詢中排序的欄位,排序欄位若通過索引去訪問將大大提高排序速度
  • 查詢中統計或者分組的欄位

6、哪些情況不需要創建索引?

  • 表記錄太少
  • 經常增刪改的表
  • 如果某個數據列包含許多重覆的內容,為它建立索引就沒有太大的實際效果

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 單例模式: 即在整個生命周期中,對於該對象的生產始終都是一個,不曾變化。 保證了一個類僅有一個實例,並提供一個訪問它的全局訪問點。 作用: 在要求線程安全的情況下,保證了類實例的唯一性,線程安全。 在不需要多實例存在時,保證了類實例的單一性。不浪費記憶體。 特點: 公有的方法獲取實例, 私有的構造方法 ...
  • 三大查找演算法 1.二分查找(Binary Search) 2.插值查找(InsertValue Search) 3.斐波那契查找(Fibonacci Search) ...
  • Map創建 創建Map: var map1 = {"first":"Dart",1:true,true:"2"}; 創建不可變Map: var map2 = const{"first":"Dart",1:true,true:"2"};構造創建:var map3 = new Map(); 常用操作 [ ...
  • 一、創建list 創建List : var list = [1,2,3,"Dart",true]; 創建不可變List : var list = const [1,2,3,"Dart",true]; 構造創建:var list3 = new List(); 二、常用操作 [],length,add( ...
  • execute(String sql) 可執行任何sql語句,但返回值是void,所以一般用於資料庫的新建、修改、刪除和數據表記錄的增刪改。 int update(String sql) int update(String sql, Object...args) 增刪改,args傳遞實參,返回受影響 ...
  • 3. 如果同時拿一個板塊股票的收市價和成交額 前一篇說到,用大盤指數,如恆生指數,上證,深證,這些重要的大盤指數來做Dataframe主鍵,那麼如果是同時拿一個板塊股票的收市價和成交額,可以怎樣操作呢。 在實際開發中,應該是簡單的數據結構,容易閱讀為主,所以Dataframe的multi index ...
  • 1.線程安全:當多個線程訪問一個對象時,如果不用考慮這些線程在運行時環境下的調度和交替執行,也不需要進行額外的同步,或者在調用方法進行任何其他的協調操作,調用這個對象的行為都可以獲得正確的結果,那這個對象就是線程安全的。 2.Java語言中的線程安全 根據線程安全的安全程度由強到弱來排序,我們可以把 ...
  • 2. 金融股票數據的另一個形態,怎樣在業務內部流動,同時怎樣避免錯誤 前一篇講解了股票的原始狀態,那麼在業務過程中,數據會變成怎樣的形態,來完成眾多奇奇怪怪的業務呢,以下將會解答。 首先,任何股票都有機會停市,退市。或者退市了再二次上市。 例子,阿裡爸爸(9988.HK)在港交所二次上市。 再例如, ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...