欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql性能優(yōu)化之索引下推

 更新時間:2021年03月18日 10:58:30   作者:愛撒謊的男孩  
這篇文章主要介紹了Mysql性能優(yōu)化之索引下推,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

索引下推(index condition pushdown )簡稱ICP,在Mysql5.6的版本上推出,用于優(yōu)化查詢。

在不使用ICP的情況下,在使用非主鍵索引(又叫普通索引或者二級索引)進(jìn)行查詢時,存儲引擎通過索引檢索到數(shù)據(jù),然后返回給MySQL服務(wù)器,服務(wù)器然后判斷數(shù)據(jù)是否符合條件 。

在使用ICP的情況下,如果存在某些被索引的列的判斷條件時,MySQL服務(wù)器將這一部分判斷條件傳遞給存儲引擎,然后由存儲引擎通過判斷索引是否符合MySQL服務(wù)器傳遞的條件,只有當(dāng)索引符合條件時才會將數(shù)據(jù)檢索出來返回給MySQL服務(wù)器 。

索引條件下推優(yōu)化可以減少存儲引擎查詢基礎(chǔ)表的次數(shù),也可以減少M(fèi)ySQL服務(wù)器從存儲引擎接收數(shù)據(jù)的次數(shù)。

開擼

在開始之前先先準(zhǔn)備一張用戶表(user),其中主要幾個字段有:id、name、age、address。建立聯(lián)合索引(name,age)。

假設(shè)有一個需求,要求匹配姓名第一個為陳的所有用戶,sql語句如下:

SELECT * from user where name like '陳%'

根據(jù) "最佳左前綴" 的原則,這里使用了聯(lián)合索引(name,age)進(jìn)行了查詢,性能要比全表掃描肯定要高。

問題來了,如果有其他的條件呢?假設(shè)又有一個需求,要求匹配姓名第一個字為陳,年齡為20歲的用戶,此時的sql語句如下:

SELECT * from user where name like '陳%' and age=20

這條sql語句應(yīng)該如何執(zhí)行呢?下面對Mysql5.6之前版本和之后版本進(jìn)行分析。

Mysql5.6之前的版本

5.6之前的版本是沒有索引下推這個優(yōu)化的,因此執(zhí)行的過程如下圖:

會忽略age這個字段,直接通過name進(jìn)行查詢,在(name,age)這課樹上查找到了兩個結(jié)果,id分別為2,1,然后拿著取到的id值一次次的回表查詢,因此這個過程需要回表兩次

Mysql5.6及之后版本

5.6版本添加了索引下推這個優(yōu)化,執(zhí)行的過程如下圖:

InnoDB并沒有忽略age這個字段,而是在索引內(nèi)部就判斷了age是否等于20,對于不等于20的記錄直接跳過,因此在(name,age)這棵索引樹中只匹配到了一個記錄,此時拿著這個id去主鍵索引樹中回表查詢?nèi)繑?shù)據(jù),這個過程只需要回表一次。

實踐

當(dāng)然上述的分析只是原理上的,我們可以實戰(zhàn)分析一下,因此陳某裝了Mysql5.6版本的Mysql,解析了上述的語句,如下圖:

根據(jù)explain解析結(jié)果可以看出Extra的值為Using index condition,表示已經(jīng)使用了索引下推。

總結(jié)

索引下推在非主鍵索引上的優(yōu)化,可以有效減少回表的次數(shù),大大提升了查詢的效率。

關(guān)閉索引下推可以使用如下命令,配置文件的修改不再講述了,畢竟這么優(yōu)秀的功能干嘛關(guān)閉呢:

set optimizer_switch='index_condition_pushdown=off';

到此這篇關(guān)于Mysql性能優(yōu)化之索引下推的文章就介紹到這了,更多相關(guān)Mysql 索引下推內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mysql大數(shù)據(jù)量查詢優(yōu)化思路詳析

    Mysql大數(shù)據(jù)量查詢優(yōu)化思路詳析

    這篇文章主要介紹了Mysql大數(shù)據(jù)量查詢優(yōu)化思路,Mysql大表查詢優(yōu)化,理論上千萬級別以下的數(shù)據(jù)量Mysql單表查詢性能處理都是可以的。下文我們就來看看具體得思路解析
    2022-01-01
  • MySQL中slave監(jiān)控的延遲情況分析

    MySQL中slave監(jiān)控的延遲情況分析

    這篇文章主要介紹了MySQL中slave監(jiān)控的延遲情況分析,主要針對MySQL的復(fù)制環(huán)境情況下,需要的朋友可以參考下
    2015-05-05
  • Mysql樹形表的2種查詢解決方案(遞歸與自連接)

    Mysql樹形表的2種查詢解決方案(遞歸與自連接)

    MySQL作為一個關(guān)系型數(shù)據(jù)庫,存儲著許多的數(shù)據(jù)信息,在實際應(yīng)用中經(jīng)常會遇到需要存儲樹形結(jié)構(gòu)數(shù)據(jù)的情境,例如部門結(jié)構(gòu)、商品分類等,這篇文章主要給大家介紹了關(guān)于Mysql樹形表的2種查詢解決方案,分別是遞歸與自連接,需要的朋友可以參考下
    2023-11-11
  • MySQL數(shù)據(jù)類型varchar詳解

    MySQL數(shù)據(jù)類型varchar詳解

    這篇文章詳細(xì)介紹了MySQL數(shù)據(jù)類型varchar,探討varchar到底能存多長的數(shù)據(jù)、InnoDB和MyISAM中的varchar等問題,需要的朋友可以參考下
    2014-03-03
  • mysql初始化命令mysqld?--initialize參數(shù)說明小結(jié)

    mysql初始化命令mysqld?--initialize參數(shù)說明小結(jié)

    本文主要介紹了mysql初始化命令mysqld?--initialize參數(shù)說明小結(jié),文中通過圖表代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • Mysql 數(shù)據(jù)庫常用備份方法和注意事項

    Mysql 數(shù)據(jù)庫常用備份方法和注意事項

    Mysql 數(shù)據(jù)庫常用備份方法和注意事項 ,需要的朋友可以參考下。
    2010-04-04
  • Mysql 5.7.17 winx64在win7上的安裝教程

    Mysql 5.7.17 winx64在win7上的安裝教程

    本文給大家介紹Mysql 5.7.17 winx64在win7上的安裝教程,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-04-04
  • mysql 8.0.17 安裝配置圖文教程

    mysql 8.0.17 安裝配置圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 8.0.17 安裝配置圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • MYSQL中varchar和TEXT的相關(guān)問題詳析

    MYSQL中varchar和TEXT的相關(guān)問題詳析

    varchar 和 text 是 MySQL 字符存儲爭議比較多的領(lǐng)域,下面這篇文章主要給大家介紹了關(guān)于MYSQL中varchar和TEXT,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • Mysql5.7如何修改root密碼

    Mysql5.7如何修改root密碼

    mysql修改管理員root的密碼是個很常見的問題了,網(wǎng)上也有很多的教程,然而新版的MYSQL5.7卻能使用之前的教程,小編經(jīng)過一番摸索,才找到了修改辦法,這里分享給大家。
    2016-01-01

最新評論