MySQL中的索引

2021-08-25 06:18:20 字數 2636 閱讀 5321

mysql 中的索引

日期: 2010-06-04

[ 引言 ]

如圖書館等存放大量資料的場合都需要設定索引以方便檢索。當資料庫中儲存的記錄逐漸海量化的時候,合理地採用索引能大大改善程式效能。

[ 使用索引 ]

首先,建立乙個用於測試的表:

create table `test`.`books` (

`id` int not null auto_increment ,

`title` varchar( 100 ) character set utf8 collate utf8_general_ci not null ,

`author` varchar( 50 ) character set utf8 collate utf8_general_ci not null ,

`press` varchar( 80 ) character set utf8 collate utf8_general_ci not null ,

primary key ( `id` )

) engine = myisam character set utf8 collate utf8_general_ci

以上語句在建表的過程中同時指定了主鍵,這會建立乙個主鍵索引,即資料庫中最常見的索引型別。

除了 primary 關鍵字, unique 關鍵字也會形成索引。不同的是,每個表中主鍵索引只能有乙個,而唯一索引可以有多個。而二者都可以指定多欄位索引:

drop table books;

create table `test`.`books` (

`id` int not null auto_increment ,

`title` varchar( 100 ) character set utf8 collate utf8_general_ci not null ,

`author` varchar( 50 ) character set utf8 collate utf8_general_ci not null ,

unique (title, author),

`press` varchar( 80 ) character set utf8 collate utf8_general_ci not null ,

primary key ( `id` )

) engine = myisam character set utf8 collate utf8_general_ci

以上的 unique 關鍵字用書名和作者的組合形成了唯一索引。

如果經常性地需要對作者進行排序,那麼可以為該字段建立乙個索引;或者,當作者有姓氏和姓名兩個不同字段,也可以建立多欄位索引。

drop table books;

create table `test`.`books` (

`id` int not null auto_increment ,

`title` varchar( 100 ) character set utf8 collate utf8_general_ci not null ,

`author` varchar( 50 ) character set utf8 collate utf8_general_ci not null ,

index ( author ) ,

`press` varchar( 80 ) character set utf8 collate utf8_general_ci not null ,

primary key ( `id` )

) engine = myisam character set utf8 collate utf8_general_ci

最後一種索引是使用 fulltext 關鍵字建立的全文索引。 mysql 為待搜尋的文字進行分詞(預設忽略少於 4 個字元的單詞,可自定義),從而高效地在 char 、 verchar 或 text 型別資料中搜尋。

[ 理解索引 ]

要理解索引,首先需要了解資料如何儲存在硬碟上。不同的儲存引擎採取的措施可能不一樣,比如 mysql 客戶端預設採用 myisam ,該引擎為每個表建立單獨的檔案。

不管是否為每個表建立了單獨的檔案,作業系統從硬碟讀取資料到記憶體中總是以頁為單位的。因此,如果要獲取特定記錄,就需要把包含該記錄的頁讀入。

mysql 在獲取一條記錄的時候,可以採取逐條掃瞄或者索引訪問兩種不同的方法。假設採取第一種方法,要獲取 id 為 1234 的記錄,就需要順序地、依次地訪問過前 1233 條記錄。不僅如此,還需要考慮每次讀入資料頁的 io 開銷。而如果採取索引,則可以根據索引指向的頁以及記錄在頁中的位置,迅速地讀取目標頁進而獲取目標記錄。

除了在獲取特定行的情況下使用 hash 十分快捷,在其它情況下都(預設)採用 b 樹來構建索引。 b 樹是平衡多叉樹,每個節點存放多少個值取決於值所佔的空間,這與每一張資料頁存放多少條記錄與記錄資訊量有關同理。節點中的值是以非降序進行排列的,節點中的值總是小於等於指向它的結點中的值。

mysql 使用 b 樹構造索引的情況下,是由葉子指向具體的頁和記錄的。並且乙個葉子有乙個指標指向下乙個葉子。

使用索引需要注意:

⑴ 只對 where 和 order by 需要查詢的字段設定索引,避免無意義的硬碟開銷;

⑵ 組合索引支援字首索引;

⑶ 更新表的時候,如增刪記錄, mysql 會自動更新索引,保持樹的平衡;

MySQL索引,MySQL中索引的限制?

mysql中索引的限制 1 myisam儲存引擎引鍵的長度綜合不能超過1000位元組 2 blob和text型別的列只能建立字首索引 3 mysql目前不支援函式索引 4 使用!或者 的時候mysql不能使用索引 5 過濾字段使用了函式運算的時候如 abs key sum key 的時候mysql無...

mysql中的索引

mysql中的索引 什麼是索引?索引是對資料庫中某乙個表的資料進行排序,這種排序並不是真正的對錶中資料按照大小排序,而是另外再建立乙個索引檔案來存放包含btree資料結構,在資料結構中根據索引欄位的值排序,資料結構的值包括 索引欄位的值和索引對應資料行的位址。索引查詢就是先查詢這個索引檔案來獲得資料...

MySql中的索引

索引就是資料庫內部對某個表的所有資料預先進行的某種排序,以便於後面的快速查詢。作用 可以極大的加快資料的查詢速度 通常所謂的建立索引,就是指定乙個表的某個或某些字段作為 索引資料字段 就可以了,形式為 索引型別 要建立的索引的欄位名 create table if notexists 表名 欄位1,...