最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言準備

我們先準備一張表和幾個字段,方便介紹覆蓋索引和復(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ù)合索引的順序,通常情況下是不會走索引的,因為復(fù)合索引是按照最左匹配原則,最左匹配原則的意思是查詢條件的順序要按照復(fù)合索引字段順序。

為什么要說通常情況下不走索引呢,是因為MySQL的查詢優(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在查詢時會認為使用索引能夠加速查詢,也會使用索引。

這里,有些同學(xué)可能會對稀疏和密集這兩個詞有些困惑,不明白這兩個詞的意思,在這里要單獨拿出來說一下,下面往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);

當我們查詢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中substr()函數(shù)的使用示例

    MySQL中substr()函數(shù)的使用示例

    mysql?substr函數(shù)是用來截取數(shù)據(jù)庫某一列字段中的一部分,本文主要介紹了MySQL中substr()函數(shù)的使用示例,具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • CentOS7下 MySQL定時自動備份的實現(xiàn)方法

    CentOS7下 MySQL定時自動備份的實現(xiàn)方法

    這篇文章主要介紹了CentOS7 下MySQL定時自動備份的實現(xiàn)方法,主要實現(xiàn)了數(shù)據(jù)庫備份,清理過期備份文件功能,需要的朋友可以參考下
    2019-12-12
  • 系統(tǒng)講解MySQL數(shù)據(jù)庫中事務(wù)的核心機制與應(yīng)用實踐

    系統(tǒng)講解MySQL數(shù)據(jù)庫中事務(wù)的核心機制與應(yīng)用實踐

    在數(shù)據(jù)庫開發(fā)中,事務(wù)是保障數(shù)據(jù)安全的核心機制,本文將從實際問題出發(fā),系統(tǒng)拆解 MySQL 事務(wù)的核心概念、ACID 特性、隔離級別、底層實現(xiàn)(MVCC)及實戰(zhàn)操作,幫你徹底搞懂事務(wù)的底層邏輯與使用規(guī)范
    2026-05-05
  • MySQL優(yōu)化GROUP BY方案

    MySQL優(yōu)化GROUP BY方案

    滿足GROUP BY子句的最一般的方法是掃描整個表并創(chuàng)建一個新的臨時表,表中每個組的所有行應(yīng)為連續(xù)的,然后使用該臨時表來找到組并應(yīng)用累積函數(shù)(如果有)。在某些情況中,MySQL能夠做得更好,即通過索引訪問而不用創(chuàng)建臨時表。
    2014-07-07
  • MySQL數(shù)據(jù)庫存儲的路徑反斜杠"\"消失了的問題解決

    MySQL數(shù)據(jù)庫存儲的路徑反斜杠"\"消失了的問題解決

    文章主要討論了在將包含反斜杠路徑存入數(shù)據(jù)庫時遇到的問題的解決辦法,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2026-05-05
  • MySQL誤刪數(shù)據(jù)恢復(fù)的操作指南

    MySQL誤刪數(shù)據(jù)恢復(fù)的操作指南

    本文檔詳細介紹了MySQL誤刪數(shù)據(jù)的恢復(fù)流程,包括驗證binlog、數(shù)據(jù)提取、格式轉(zhuǎn)換和批量導(dǎo)入等步驟,通過示例,展示了如何在物聯(lián)網(wǎng)場景下恢復(fù)時序數(shù)據(jù),并提供了一系列關(guān)鍵命令和預(yù)防措施以避免誤刪,需要的朋友可以參考下
    2025-12-12
  • 淺談MySQL觸發(fā)器的原理以及使用

    淺談MySQL觸發(fā)器的原理以及使用

    這篇文章主要介紹了淺談MySQL觸發(fā)器的原理以及使用,觸發(fā)器的執(zhí)行不需要使用 CALL 語句來調(diào)用,也不需要手工啟動,只要一個預(yù)定義的事件發(fā)生就會被 MySQL自動調(diào)用,需要的朋友可以參考下
    2023-05-05
  • MySQL 字段默認值該如何設(shè)置

    MySQL 字段默認值該如何設(shè)置

    這篇文章主要介紹了MySQL 字段默認值該如何設(shè)置,幫助大家更好的理解和學(xué)習使用MySQL,感興趣的朋友可以了解下
    2021-02-02
  • MySQL實例crash的案例詳細分析

    MySQL實例crash的案例詳細分析

    這篇文章主要給大家介紹了關(guān)于MySQL實例crash的相關(guān)資料,文中通過示例代碼的非常詳細,對大家學(xué)習或者使用mysql具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2018-12-12
  • Mysql實戰(zhàn)練習之簡單圖書管理系統(tǒng)

    Mysql實戰(zhàn)練習之簡單圖書管理系統(tǒng)

    由于課設(shè)需要做這個,于是就抽了點閑余時間,寫了下,用Mysql與Java,基本全部都涉及到,包括借書/還書,以及書籍信息的更新,查看所有的書籍。需要的朋友可以參考下
    2021-09-09

最新評論

宁波市| 莱芜市| 三河市| 佛冈县| 韶关市| 浠水县| 嫩江县| 甘德县| 镇安县| 汉阴县| 聊城市| 翼城县| 类乌齐县| 乐平市| 龙江县| 平定县| 外汇| 吴江市| 尉犁县| 溆浦县| 德清县| 鄯善县| 泰安市| 清原| 白河县| 天台县| 汉源县| 辽阳县| 遵义市| 武邑县| 康定县| 江城| 永定县| 共和县| 利津县| 维西| 阿荣旗| 栖霞市| 孝昌县| 儋州市| 嘉黎县|