国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Mysql-InnoDB索引:普通索引、主鍵索引、唯一索引、組合索引

這篇具有很好參考價值的文章主要介紹了Mysql-InnoDB索引:普通索引、主鍵索引、唯一索引、組合索引。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

InnoDB 和 MyISAM 的區(qū)別


事務方面

InnoDB支持事務,MyISAM不支持事務。這是Mysql將默認存儲引擎從MyISAM變成InnoDB的重要原因之一

外鍵方面

InnoDB支持外鍵,而MyISAM不支持。對一個包含外鍵的InnoDB表轉(zhuǎn)為MyISAM會失敗

索引層面

InnoDB是聚集(聚簇)索引,MyISAM是非聚集(非聚簇)索引。

MyISAM 支持 FULLTEXT 類型的全文索引。

InnoDB不支持FULLTEXT類型的全文索引,但是InnoDB可以使用sphinx插件支持全文索引,并且效果更好。

鎖粒度方面

InnoDB最小的鎖粒度是行鎖,MyISAM最小的鎖粒度是表鎖

一個更新語句會鎖住整張表,導致其他查詢和更新都會被阻塞,因此并發(fā)訪問受限。

這也是Mysql將默認存儲引擎從MyISAM變成InnoDB的重要原因之一

硬盤存儲結(jié)構(gòu)

MyISAM在硬盤上存儲成三個文件。第一個文件的名字以表的名字開始,擴展名指出文件類型。

  • .frm 文件存儲 表的定義
  • 數(shù)據(jù)文件 的擴展名為 .MYD(MYData)
  • 索引文件 的擴展名為 .MYI (MYIndex)

InnoDB存儲引擎存儲數(shù)據(jù)庫數(shù)據(jù),一共有兩個文件(沒有專門保存數(shù)據(jù)的文件)

  • Frm文件:表的定義文件
  • Ibd文件:數(shù)據(jù)索引存儲文件。數(shù)據(jù)以主鍵進行聚集存儲,把真正的數(shù)據(jù)保存在葉子節(jié)點

聚簇索引 和 非聚簇索引


聚簇索引(InnoDB)

數(shù)據(jù)存儲索引放到了一塊,索引結(jié)構(gòu)的葉子節(jié)點保存了行數(shù)據(jù)

表數(shù)據(jù)按照索引的順序來存儲的,也就是說索引項的順序與表中記錄的物理順序一致

InnoDB中,在聚簇索引之上創(chuàng)建的索引稱之為輔助索引,像組合索引、前綴索引、唯一索引等等

Mysql-InnoDB索引:普通索引、主鍵索引、唯一索引、組合索引

左側(cè) 聚簇索引中 B+樹的葉子節(jié)點中直接存儲了數(shù)據(jù)

右側(cè) 輔助索引(又稱二級索引),右側(cè)的將user_name設(shè)置為普通索引,葉子節(jié)點存儲數(shù)據(jù)記錄主鍵的key,在通過key去聚簇索引中查詢得到葉子節(jié)點存儲的數(shù)據(jù)記錄

PS:為什么不推薦使用select * ?

如果只查id,通過一次查詢即可查出數(shù)據(jù),如果使用select * 包含了其他字段,查詢次數(shù)不止一次導致效率較低

非聚簇索引(MyISAM)

數(shù)據(jù)索引分開存儲,表數(shù)據(jù)存儲順序與索引順序無關(guān)


Mysql-InnoDB索引:普通索引、主鍵索引、唯一索引、組合索引

1、 葉子節(jié)點保存的是數(shù)據(jù)的地址,根據(jù)ID在B+樹中找到存儲該行數(shù)據(jù)的物理地址

2、根據(jù)該物理地址在數(shù)據(jù)文件中拿到數(shù)據(jù)


索引失效底層原理

索引為什么會失效:

1、使用最佳左前綴法則:

首先,聯(lián)合索引,最左側(cè)的數(shù)據(jù)是有序的,也就是a是有序的,在最滿足最左前綴法時,右側(cè)的數(shù)據(jù)是有序的,當a固定時,b是有序的。

如最下方的圖,當我們使用最左邊的字段時,假如where a?= 1 and b = 1?,此時,a = 1固定了,b也是有序的,所以使用到了索引。

此時當我們使用 where b = 1 不符合最左前綴法則,在a沒有固定的情況下,b是無序的,此時如何在一個無序的B+樹上找到你所需要的值?沒有走到索引,導致進行了全表查詢

2、大于號右邊的索引會失效:

比如 where a > 1 and b = 1? 根據(jù)a >1 的數(shù)據(jù) 如下圖,此時去找b = 1的數(shù)據(jù),此時b是無序的,所以無法通過二分查找去查找b的數(shù)據(jù),沒有使用到索引

此時如果 是 a = 1 則滿足索引Mysql-InnoDB索引:普通索引、主鍵索引、唯一索引、組合索引

3、like索引會失效:

在數(shù)據(jù)庫中,string類型的也會根據(jù)26個字母來進行排序,此時如果使用 user_name like?'a%'?

此時就滿足索引,如果使用user_name like?'%a' 或者 user_name like?'%a%',同理a右邊的字母是無序的,無法使用索引

Mysql-InnoDB索引:普通索引、主鍵索引、唯一索引、組合索引

Mysql-InnoDB索引:普通索引、主鍵索引、唯一索引、組合索引文章來源地址http://www.zghlxwxcb.cn/news/detail-438585.html

以下用法會導致索引失效:

  • 計算,如:+、-、*、/、!=、<>、is null 、 is not null 、 or
  • 函數(shù) 如:sum() round() 等
  • 手動/自動類型轉(zhuǎn)換 如 id ="1",本來是數(shù)字,寫成了字符串

到了這里,關(guān)于Mysql-InnoDB索引:普通索引、主鍵索引、唯一索引、組合索引的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 請你來了解一下Mysql-InnoDB中事務的兩段式提交

    請你來了解一下Mysql-InnoDB中事務的兩段式提交

    A:原子性 原子性表示把一個事務中所有的操作視為一個整體,要么全部成功,要么全部失敗,是事務模型區(qū)別文件系統(tǒng)的重要特征之一 C:一致性 官方對一致性的解釋為事務將數(shù)據(jù)庫從一種狀態(tài)轉(zhuǎn)變?yōu)橄乱环N一致性狀態(tài),在事務開始之前和食物結(jié)束以后,數(shù)據(jù)庫的完整性約

    2024年01月23日
    瀏覽(20)
  • 【?MySQL | 約束(一)】概念 | 非空 | 唯一 | 主鍵 | 自增長約束

    【?MySQL | 約束(一)】概念 | 非空 | 唯一 | 主鍵 | 自增長約束

    ?歡迎來到小K的MySQL專欄,本節(jié)將為大家?guī)鞰ySQL約束的概念 | 非空約束 | 唯一約束 | 主鍵約束 | 自增長約束的分享 ? 1. 約束(Constraint)概念 1.1 為什么需要約束 對于已經(jīng)創(chuàng)建好的表,雖然字段的數(shù)據(jù)類型決定了所能存儲的數(shù)據(jù)類型,但是表中所存儲的數(shù)據(jù)是否合法并沒有進行

    2024年02月16日
    瀏覽(18)
  • 【MySQL】MySQL表的約束-空屬性/默認值/列屬性/zerofill/主鍵/自增長/唯一鍵/外鍵

    【MySQL】MySQL表的約束-空屬性/默認值/列屬性/zerofill/主鍵/自增長/唯一鍵/外鍵

    表的約束:表中一定要有各種約束,通過約束,讓我們未來插入數(shù)據(jù)庫表中的數(shù)據(jù)是符合預期的。約束的本質(zhì)是通過計數(shù)手段,倒逼程序員,插入正確的數(shù)據(jù),反過來,站在mysql的視角,凡是插入進來的數(shù)據(jù),都是符合約束的 約束的最終模板:保證數(shù)據(jù)的完整性和可預期性

    2024年02月01日
    瀏覽(18)
  • mysql中主鍵索引和聯(lián)合索引的原理解析

    mysql中主鍵索引和聯(lián)合索引的原理解析

    主鍵索引 :按照主鍵數(shù)據(jù)從小到大按照從左到右進行排序,葉節(jié)點只存儲數(shù)據(jù)區(qū); 接著將上面的頁生成出來,頁只存儲索引和指針,指針指向數(shù)據(jù)域,當通過主鍵查找數(shù)據(jù)時,從B+樹的頭部開始尋址數(shù)據(jù)、讀取數(shù)據(jù)。 上面為索引頁 下面為數(shù)據(jù)頁 查詢select * from table where a=6,

    2024年04月08日
    瀏覽(35)
  • 淺談mysql的主鍵和索引

    淺談mysql的主鍵和索引

    在上一篇文章《count(1)、count(*)、count(字段)哪個更靠譜》中,我們提到過主鍵是優(yōu)化不了count的查詢效率的,需要建索引才可以,那么,是不是意味著主鍵的效率還不如一般的索引呢?懷著這個疑問,我們一起來了解下mysql主鍵和索引的相關(guān)知識。 mysql數(shù)據(jù)庫的MYISAM和InnoDB引擎

    2024年02月08日
    瀏覽(32)
  • 【Mysql】復合主鍵的索引

    【Mysql】復合主鍵的索引

    復合主鍵在where中使用查詢的時候到底走不走索引呢?例如下表: 當執(zhí)行以下SQL的時候到底走不走索引呢? ? ? ? ? ? ? Explain結(jié)果: 使用索引 ? 使用索引 ? 使用索引 ? 不使用索引 ? 不使用索引 ? 使用索引 ? 結(jié)論:Mysql復合主鍵的順序十分重要,WHERE查詢條件中會按列匹配

    2023年04月25日
    瀏覽(22)
  • 【MySQL高級】——InnoDB索引&MyISAM索引

    【MySQL高級】——InnoDB索引&MyISAM索引

    ??MySQL官方對索引的定義為:索引(Index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。 索引的本質(zhì):索引是數(shù)據(jù)結(jié)構(gòu)。你可以簡單理解為“排好序的快速查找數(shù)據(jù)結(jié)構(gòu)”,滿足特定查找算法。 這些數(shù)據(jù)結(jié)構(gòu)以某種方式指向數(shù)據(jù), 這樣就可以在這些數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上實現(xiàn) 高級查找

    2023年04月27日
    瀏覽(20)
  • 主鍵、外鍵、建表范式、MySQL索引、用戶管理

    1.1 問題 完成如下練習: 練習主鍵的創(chuàng)建、查看、刪除、添加、驗證主鍵 練習復合主鍵的使用 練習與auto_increment連用的效果 1.2 方案 主鍵使用規(guī)則: 表頭值不允許重復,不允許賦NULL值 一個表中只能有一個primary key 表頭 多個表頭做主鍵,稱為復合主鍵,必須一起創(chuàng)建和刪除

    2024年01月16日
    瀏覽(26)
  • MySQL數(shù)據(jù)庫唯一索引

    MySQL數(shù)據(jù)庫唯一索引

    創(chuàng)建索引是指在某個表的一列或多列上建立一個索引,以便提高對表的訪問速度。創(chuàng)建索引有3種方式,分別是1.創(chuàng)建表的時候創(chuàng)建索引、2.在已經(jīng)存在的表上創(chuàng)建索引和使用3.ALTER TABLE語句來創(chuàng)建索引。 本文福利, 莬 費領(lǐng)取Qt開發(fā)學習資料包、技術(shù)視頻,內(nèi)容包括(C++語言基

    2024年02月08日
    瀏覽(96)
  • mysql的主鍵索引為什么不能null

    這是一個非常奇怪且有趣的問題??梢酝ㄟ^官方文檔進行解讀 https://dev.mysql.com/doc/refman/5.7/en/glossary.html A special value in SQL, indicating the absence of data. Any arithmetic operation or equality test involving a NULL value, in turn produces a NULL result. (Thus it is similar to the IEEE floating-point concept of NaN, “not

    2024年02月14日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包