成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

五分鐘,讓你明白MySQL是怎么選擇索引

數據庫 MySQL
索引是為加速查詢速度,創建的索引也符合所有規則,但MySQL就是不使用理想的索引,導致查詢速度變慢并產生大量慢查詢記錄。

今天就從這個問題來聊聊MySQL選擇索引時都做一些什么事情。

[[433710]]

一、如何選擇索引

影響優化器的幾大因素

一條查詢SQL執行需要經過連接器、分析器、優化器、執行器,而選擇索引的重任就交給了優化器。

優化器在多個索引中選擇目的是為了找出執行代價最低的方案。

影響優化器選擇無非就這幾個因素,掃描行數、是否使用了臨時表、是否使用文件排序。

臨時表、文件排序這個兩個點會在后期文章給大家慢慢引出,今天只聊掃描行數。

掃描行數越少則訪問磁盤數據的次數就越少,消耗的CPU資源越少。

那么這個掃描行數是從哪里取的呢?

掃描行數從何而來?

創建索引一直提倡大家給區分度高的列建立索引,在一個索引上不同值的個數稱之為基數(cardinality)。

使用show index from table_name可以查看每個索引的基數是多少。

 

五分鐘,讓你明白MySQL是怎么選擇索引

 

索引基數

索引基數怎么計算

MySQL使用采樣統計的方法,會選出N個數據頁,每個數據頁大小16kb,接著統計選出來的數據頁上的不同值就會得到一個平均值,用平均值在乘以索引的頁面數得到的結果就是這個索引的基數。

表數據是持續增加或刪減的,統計的這個數據也不是時時變化的,當變更的數據超過1/M時會自動觸發重新計算。

這個M是根據參數innodb_stats_persistent的值選則的,設置為on值為10,設置為off值為16。

索引基數通過這種方式計算不是精準的但也差不了多少

為什么優化器選擇了掃描行數多的索引?

第一種情況

表增刪十分頻繁,導致掃描行數不準確

第二種情況

假設你主鍵索引掃描行數是10W行,而普通索引需要掃描5W行,這種情況就會遇到優化器選擇了掃描行數多的。

在索引那一期文章中知道主鍵索引是不需要回表的,找到值直接就返回對應的數據了。

而普通索引是需要先拿到主鍵值,再根據主鍵值獲取對應的數據,這個過程優化器選擇索引時需要計算的一個成本。

如何解決這種情況

掃描行數不準確時可以執行analyze table table_name命令,重新統計索引信息,達到預期優化器選擇的索引。

二、索引選擇異常如何處理

方案一

在MySQL中提供了force index來強制優化器使用這個索引。

使用方法:select * from table_name force index (idx_a) where a = 100;

但別誤解force index的使用方法,之前在代碼中看到這樣一個案例,給查詢列使用了函數操作導致使用不上索引,然后這哥們就直接使用force index,肯定不行的哈!

當優化器沒有正確選擇索引時是可以使用這種方案來解決。

缺點

使用force index的缺點相信大家也知道就是太死板,一旦索引名字改動就會失效。

方案二

刪掉誤選的索引,簡單粗暴,很多索引建立其實也是給優化器的一個誤導,直接刪掉即可。

方案三

修改SQL語句,主動引導MySQL使用期望的索引,一般情況這種做法使用的很少除非你對系統十分熟悉,否則盡量少操作。

三、總結

優化器選擇索引首先會根據掃描行數再由執行成本決定。

當索引統計信息不準確時,使用analyze table 解決。

優化器選擇了錯誤的索引,只用force index來快速矯正,再通過優化SQL語句來引導優化器選擇正確的索引,最暴力的手法是直接刪除誤選的索引。

 

責任編輯:華軒 來源: 今日頭條
相關推薦

2021-11-11 15:03:35

MySQLSQL索引

2017-11-20 10:25:20

數據庫MySQL索引

2017-06-07 18:40:33

PromiseJavascript前端

2009-11-05 10:56:31

WCF通訊

2024-04-28 12:55:46

redis頻道機制

2009-11-06 16:05:37

WCF回調契約

2020-11-09 09:59:50

Ajax技術

2019-10-12 08:36:48

Java程序員數據結構

2020-04-06 14:53:05

MySQL數據庫字符串

2009-10-29 11:39:52

ADO.NET連接池

2024-02-21 21:19:18

切片Python語言

2022-03-08 08:39:22

gRPC協議云原生

2023-01-03 08:36:34

MySQL索引

2021-10-26 14:35:10

架構

2021-11-08 18:37:45

MySQL解碼測試

2025-01-24 08:38:47

2019-04-01 14:01:13

B+樹索引哈希索引算法

2019-06-05 09:42:53

Kafka App 消息隊列

2023-07-15 18:26:51

LinuxABI

2015-12-03 14:10:26

systemd容器Linux
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产乱码精品一区二区三区五月婷 | 在线观看国产www | av日韩一区 | 精品国产一区二区三区av片 | 日韩视频国产 | 手机三级电影 | 精品视频一区二区三区在线观看 | 亚洲一区中文字幕 | 天天夜夜操 | 欧美videosex性极品hd | 在线超碰 | 91麻豆精品国产91久久久更新资源速度超快 | 波多野结衣二区 | 日韩精品久久一区二区三区 | 亚洲欧美一区二区三区视频 | 精品国产乱码久久久久久蜜柚 | 亚洲成人日韩 | 亚洲综合中文字幕在线观看 | 日韩欧美在线观看 | 免费精品在线视频 | 日日操夜夜操天天操 | 在线免费观看成人 | 亚洲性在线 | 久久久亚洲一区 | 中文字幕日韩在线 | 精品久久电影 | 中文成人在线 | 成人久久18免费网站麻豆 | 久久婷婷香蕉热狠狠综合 | 性色网站 | 精品在线一区 | av在线视| 黄网站涩免费蜜桃网站 | 免费成人高清在线视频 | 国产区视频在线观看 | 国产精品视频在线免费观看 | 成人精品久久久 | 国产精品v | 中国一级大毛片 | 日韩在线欧美 | 亚洲va欧美va天堂v国产综合 |