日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

InnoDB索引

發布時間:2025/6/16 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 InnoDB索引 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

名詞解釋

clustered index(聚集索引)

對(primary key)主鍵索引的一種表述。InnoDB表存儲是基于primary key列來組織的,這樣做可以加快查詢和排序速度。為了獲得最好的性能,在選擇primary key columns的時候要特別小心。因為修改clustered index(聚集索引)列是一個昂貴的操作,所以選擇作為primary的列通常都是很少或者從不會被更新的列。

primary key(主鍵)

A set of columns(一組列),可以唯一標識表中的每一行。因此,它必須是一個unique index,并且不允許有NULL值。

InnoDB?organizes the table storage based on the column values of the primary key.

secondary index(輔助索引或二級索引)

索引的一種類型。一個InnoDB表可以有0個或者多個secondary index。

B-tree

tree數據結構在數據庫索引中被廣泛采用。這種結構總是有序的。可以快速查找,精確匹配(等于)或者范圍匹配(比如,大于、小于、BETWEEN等操作)。大多數的存儲引擎都是使用的這種結構,比如InnoDB和MyISAM。

因為B-tree節點可以有許多孩子,一個B-tree和二叉樹不一樣,二叉樹它限制每個結點只能2個孩子。

?

聚集索引和輔助索引

每個InnoDB表都有一個特別的索引叫clustered index。通常,clustered index和primary key是一個意思。

為了在查詢、插入以及數據庫的其它操作時獲得最好的性能,你必須理解InnoDB中是怎樣使用clustered index優化大多數查詢的。

  • 當你在表中定義了一個PRIMARY KEY的時候,InnoDB會把它作為clustered index。在你創建每一張表的時候最好定義一個primary key,如果實在沒有一個或者一組邏輯唯一并且非空的列,你就添加一個新的auto-increment(自增長)的列,讓它的值自動填充。
  • 如果你沒有在你的表中定義PRIMARY KEY,那么MySQL將查找第一個所有值非空的唯一索引列作為clustered index。
  • 如果表中沒有PRIMARY KEY,而且也沒有合適的UNIQUE index,那么InnoDB內部將生產一個名字叫GEN_CLUST_INDEX的隱藏clustered index,其值為行ID

Clustered Index是如何加速查詢的

通過clustered index來訪問一行是非常快的,因為索引檢索直接指向數據所在的頁。如果一個表很大,clustered index架構通常會節省I/O操作。

Secondary Indexes是如何關聯到Clustered Index的

除了clustered index之外的其它索引都叫Secondary Indexes。在secondary index中的每一條記錄包含那一行的primary key列。InnoDB用這個primary key的值來檢索聚集索引中的行。

如果primary key很長,那么secondary indexes將會占用更多的空間,因此用一個簡短的primary key是有好處的。

?

一個InnoDB索引的物理結構

InnoDB indexes are B-tree data structures.?Index records are stored in the leaf pages of their B-tree data structure. The default size of an index page is 16KB.

當一條新記錄被插入到InnoDB clustered index中時,InnoDB預留page(頁)的1/16的空間以備將來插入或者更新索引記錄。如果索引記錄是順序插入的(升序或者降序),那么填滿這一頁就是剩下的那15/16的空間;如果記錄是按照隨機順序插入的,那么填滿這一條就是1/2到15/16頁。配置項innodb_fill_factor定義每個B-tree page 百分之多少的空間用于存儲有序的索引記錄,剩下的空間是為以后索引增長而預留的。

你可以通過innodb_page_size設置InnoDB表空間的page size。支持64KB, 32KB, 16KB (default), 8KB, and 4KB.

?

小結

1、如果表中沒有定義primary key,則查找第一個不為空的唯一索引列作為聚集索引,若找不到,則生成一個隱藏的聚集索引

2、插入新記錄的時候,預留一頁的1/16的空間用于以后的插入或更新

?

參考?https://dev.mysql.com/doc/refman/5.7/en/innodb-indexes.html

?

總結

以上是生活随笔為你收集整理的InnoDB索引的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。