亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL中復(fù)合索引和覆蓋索引的區(qū)別詳解

 更新時間:2023年11月22日 10:14:01   作者:杜小舟  
這篇文章主要介紹了MySQL中復(fù)合索引和覆蓋索引的區(qū)別詳解,復(fù)合索引是一種索引,它包含多個字段,復(fù)合索引能夠使一個SQL查詢多個條件時也能走索引,提高查詢性能,需要的朋友可以參考下

前言準(zhǔn)備

我們先準(zhǔn)備一張表和幾個字段,方便介紹覆蓋索引和復(fù)合索引。

創(chuàng)建一個user表,表中有id、name、school、age字段。

字段名字段類型
idint
namevarchar
schoolvarchar
ageint

復(fù)合索引

先來說復(fù)合索引,復(fù)合索引是一種索引,它包含多個字段,復(fù)合索引能夠使一個SQL查詢多個條件時也能走索引,提高查詢性能。

比如,創(chuàng)建一個name、school和age的復(fù)合索引:

CREATE INDEX idx_name_school_age ON user(name, school, age);

查詢SQL為:

select * from user where name = '張三' and school = '北京大學(xué)' and age > 18

注意,在這里要注意查詢條件的順序要按照復(fù)合索引的字段順序,要是不按照復(fù)合索引的順序,通常情況下是不會走索引的,因?yàn)閺?fù)合索引是按照最左匹配原則,最左匹配原則的意思是查詢條件的順序要按照復(fù)合索引字段順序。

為什么要說通常情況下不走索引呢,是因?yàn)镸ySQL的查詢優(yōu)化器會根據(jù)條件查詢和數(shù)據(jù)分布情況選擇最優(yōu)的執(zhí)行計劃,假設(shè),我們把school和name的查詢條件到換一下,變成:

select * from user where school = '北京大學(xué)' and name = '張三' and age > 18

如果,我們條件中的school的值非常稀疏,name和age的值非常密集,那么MySQL在查詢時會認(rèn)為使用索引能夠加速查詢,也會使用索引。

這里,有些同學(xué)可能會對稀疏和密集這兩個詞有些困惑,不明白這兩個詞的意思,在這里要單獨(dú)拿出來說一下,下面往user表中增加五條數(shù)據(jù),做為案例數(shù)據(jù):

idnameschoolage
1張三北京大學(xué)18
2李四北京大學(xué)18
3王五清華大學(xué)18
4趙六北京大學(xué)18
5金七清華大學(xué)18

稀疏的意思是每個不同的值出現(xiàn)的次數(shù)很多,比如說user表中有五條記錄,name字段分別有張三、李四、王五、趙六、金七,那么我們就可以說name這個字段非常稀疏;

那么相反,密集就好理解了,比如,user表school字段的值分別只有北京大學(xué)和清華大學(xué),那么就可以說school字段的值非常密集。

總之,MySQL的查詢優(yōu)化器會根據(jù)條件查詢和數(shù)據(jù)分布情況選擇最優(yōu)的執(zhí)行計劃,并不是說我們不按照復(fù)合索引的字段順序做查詢條件就不會走復(fù)合索引。

覆蓋索引

覆蓋索引是一種索引優(yōu)化手段,假設(shè),我們想查詢user表中name等于張三,獲取張三的school和age字段數(shù)據(jù),那么我們的SQL應(yīng)該是:

slelect school, age from user where name = '張三'

那么,為了優(yōu)化這個查詢SQL,我們就需要創(chuàng)建一個復(fù)合索引,復(fù)合索引中有name、school和age字段:

CREATE INDEX idx_name_school_age ON user(name, school, age);

當(dāng)我們查詢SQL時,MySQL就可以直接從索引中獲取所需要的數(shù)據(jù),不需要再回表查詢數(shù)據(jù)了,這樣就能大大的提高查詢速度。

在這里介紹一下回表: 假設(shè),我們創(chuàng)建一個復(fù)合索引,復(fù)合索引中有name和age字段:

CREATE INDEX idx_name_school_age ON user(name, age);

我們這里寫一個查詢SQL,SQL中查詢name等于張三的school和age字段值:

slelect school, age from user where name = '張三'

那么在查詢時,SQL語句會直接查詢索引,從索引中查詢到name叫做張三的數(shù)據(jù)位置,再根據(jù)位置去表中查詢完整的數(shù)據(jù),這里,根據(jù)位置去表中查詢完整的數(shù)據(jù)叫做回表。

總結(jié)

覆蓋索引和復(fù)合索引的區(qū)別是:覆蓋索引是一種索引優(yōu)化技術(shù),而復(fù)合索引是一種索引。

使用復(fù)合索引時應(yīng)該注意查詢SQL條件的順序,以及要避免回表,從而影響到查詢效率。

到此這篇關(guān)于MySQL中復(fù)合索引和覆蓋索引的區(qū)別詳解的文章就介紹到這了,更多相關(guān)MySQL復(fù)合索引和覆蓋索引內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL OOM 系統(tǒng)二 OOM Killer

    MySQL OOM 系統(tǒng)二 OOM Killer

    前面一節(jié)重點(diǎn)分享了Linux的內(nèi)存分配策略,基于上述的分配策略,為了規(guī)避超售的風(fēng)險,Linux采了一種OOM Killer的機(jī)制,即系統(tǒng)可用內(nèi)存(包括Swap)即將使用完之前,選擇性的Kill掉一些進(jìn)程以求釋放一些內(nèi)存
    2016-07-07
  • MySQL中增刪改查操作與常見陷阱詳解

    MySQL中增刪改查操作與常見陷阱詳解

    這篇文章詳細(xì)講解了MySQL的增刪改查的語句、語義和一些我們經(jīng)常在開發(fā)工作中暴露的問題,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-11-11
  • MySQL?Workbench基本使用示例詳解

    MySQL?Workbench基本使用示例詳解

    MySQLWorkbench是一款由MySQL官方開發(fā)的統(tǒng)一可視化工具,用于數(shù)據(jù)庫管理、數(shù)據(jù)建模和SQL開發(fā),它支持Windows、Linux和macOS操作系統(tǒng),提供圖形界面簡化復(fù)雜數(shù)據(jù)庫任務(wù),感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • 用命令創(chuàng)建MySQL數(shù)據(jù)庫(de1)的方法

    用命令創(chuàng)建MySQL數(shù)據(jù)庫(de1)的方法

    下面小編就為大家?guī)硪黄妹顒?chuàng)建MySQL數(shù)據(jù)庫(de1)的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • PowerDesigner連接MySQL數(shù)據(jù)庫的詳細(xì)步驟

    PowerDesigner連接MySQL數(shù)據(jù)庫的詳細(xì)步驟

    這篇文章主要介紹PowerDesigner連接MySQL數(shù)據(jù)庫的詳細(xì)步驟,文章通過圖文介紹的非常詳細(xì),對大家學(xué)習(xí)PowerDesigner連接MySQL數(shù)據(jù)庫有一定的幫助,需要的朋友可以參考下
    2023-09-09
  • 一步步教你MySQL查詢優(yōu)化分析教程

    一步步教你MySQL查詢優(yōu)化分析教程

    這篇文章主要給大家介紹了關(guān)于MySQL查詢優(yōu)化分析的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • centos7安裝mysql5.7的踩坑記錄

    centos7安裝mysql5.7的踩坑記錄

    最近在做項(xiàng)目中發(fā)現(xiàn)CentOS 7下升級MySQL5.7的一個坑,所以下面這篇文章主要給大家介紹了關(guān)于centos7安裝mysql5.7的踩坑記錄,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • MySQL中設(shè)置服務(wù)器級別的默認(rèn)排序規(guī)則的方法

    MySQL中設(shè)置服務(wù)器級別的默認(rèn)排序規(guī)則的方法

    collation_server?是一個系統(tǒng)變量,它定義了服務(wù)器級別的默認(rèn)排序規(guī)則,本文主要介紹了MySQL中設(shè)置服務(wù)器級別的默認(rèn)排序規(guī)則的方法,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • MySQL數(shù)據(jù)庫自動補(bǔ)全命令的三種方法

    MySQL數(shù)據(jù)庫自動補(bǔ)全命令的三種方法

    這篇文章主要介紹了MySQL數(shù)據(jù)庫自動補(bǔ)全命令的三種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • MYSQL大小寫不敏感導(dǎo)致用戶登錄異常問題

    MYSQL大小寫不敏感導(dǎo)致用戶登錄異常問題

    這篇文章主要介紹了MYSQL大小寫不敏感導(dǎo)致用戶登錄異常問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評論