在關係型資料庫中,索引是加快資料檢索的資料庫結構,主要用於提高效能。使用索引查詢資料,不需要再檢索整個資料庫,大大提高檢索效率。
索引是乙個單獨的、物理的資料庫結構,是某個表中一列或若干列的集合以及相應標識這些資料頁邏輯指標清單。索引是依賴於表建立的,提供了資料庫中編排表中資料的內部方法。
表的儲存有兩部分組成:一部分是表的資料頁面,另一部分是索引頁面。索引就存放在索引頁面上。通常,索引頁面相對於資料頁面小得多。當進行資料檢索時,系統先搜尋索引頁面,從中找到所需資料的指標,再直接通過指標從資料頁資料中讀取資料。
在某種程度上可以把資料庫堪稱一本書,把索引堪稱書的目錄通過目錄查詢這本書的資訊,顯然比查詢沒有目錄的書要方便、快捷。
索引一旦建建立,將由資料庫自動管理和維護。例如,向表中插入、更新和刪除一條記錄時,資料庫會自動在索引中做出相應的修改。在編寫sql查詢語句時,具有索引的表和沒有索引的表沒有任何區別,索引只是提供一種快速訪問指定記錄的方法。
只要為適當的字段建立索引,就能大幅提高一下操作的速度。
唯一性索引的建立可以保證表中的資料記錄不重複。
在mysql中,索引是在儲存引擎中實現的,因此每種儲存引擎的索引都不一定完全按相同,並且每種儲存引擎也不一定支援所有的索引型別。根據儲存引擎定義每個表的最大索引數和最大索引長度。所有儲存引擎支援每個表至少16個索引,總索引長度至少為256個位元組。大多數儲存引擎有更高的限制。mysql中索引的儲存型別有兩種,即btree和hash,具體和表的儲存引擎相關。mysql和innodb儲存引擎只支援btree索引,memory/heap儲存引擎可以支援hash和betree索引。
雖然索引有諸多優點,但仍要注意避免在乙個表上建立大量的索引,因為這樣不但會影響插入、刪除、更新資料等效能,也會在變更表中的資料時增加調整索引索引的操作,降低系統的維護速度。
mysql的索引可以分為以下幾類:
普通索引是mysql的基本所有型別,允許在定義索引的列中插入重複值和空值。
唯一索引是指索引的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。主鍵索引是一種特殊的唯一索引,不允許有空值。
單列索引是指索引只包含單個列,乙個表可以用多個單列索引。
組合索引是指在表的多個字段組合上建立索引,只有在查詢條件中使用了這些欄位的左邊欄位時,索引才會被使用。使用組合索引時遵循最左字首集合。
全文索引是指在定義索引的列上支援值得全文查詢,允許在這些索引列中插入重複值和空值。全文索引可以在 char、varchar和text 型別得列上建立。mysql中只有myisam儲存索引支援全文索引。
空間索引是指對空間型別得字段簡歷得索引。mysql得空間資料型別有4中,分別是 geometyr、point、linestring、polygon。對於初學者來說,這類索引很少會用到。
索引的設計不合理或者缺少索引,都會對資料庫和應用效能造成障礙。高效的索引對於良好的效能非常重要。設計索引時,應該考慮以下準則。
乙個表中如有大量的索引,不僅占用磁碟空間,還會影響 insert、delete、update 等語句得效能。因為當表中得資料在更改的同時,索引也會進行調整和更新。
避免對經常更新的表進行過多的索引,並且索引的列盡可能的少。對經常用於查詢的字段應該建立索引,但要避免新增不必要的字段。
由於資料較少,查詢花費的時間可能比遍歷索引還要短,索引可能不會產生優化效果。
在條件表示式中經常用到條件值較多的列上建立索引,在不同值少的列上不要建立索引。例如學生表的性別字段,只有『男』和『女』兩個不同值,因此就無需建立索引。如果建立索引,不但不會提高查詢效率,反而會嚴重降低更新速度。
當唯一性是某種資料的特徵時,指定唯一索引。使用唯一索引,能確保列資料的完整性,以提高查詢速度。
建立索引是指在某個表的一列或多個列上建立乙個索引,以提高對標的訪問速度。在實際建立索引之前,有如下幾個注意事項:
create table 表名( 欄位1 資料型別[完整性約束條件],
欄位2 資料型別[完整性約束條件],
......
屬性名 資料型別
[ unique | fulltext | spatial ] key>
[ 索引名] ( 屬性名 [(長度)] [ asc |desc] )
);引數說明如下:
1、unique|fulltext|spatial:是可選引數,三選一,分別代表唯一索引、全文索引和空間索引。此引數不選,則預設為普通索引。
2、index或key:為同義詞,用來指定建立索引。
3、索引名:是指定索引的名稱,為可選引數,若不指定,mysql預設欄位名為索引名。
4、屬性名:指定索引對應的欄位名稱,該欄位必須為表中定義好的字段。
5、長度:指索引的長度,必須是字串型別才可以使用。
6、asc|desc:排序,預設公升序排序。
例子:
create table `hc_project_vote` (`rcd_id` int (
11) not null auto_increment comment 'id'
,`create_time` datetime comment
'建立時間',
`update_time` datetime comment
'更新時間',
`sn` varchar (
30) default '' comment 'sn'
,`project_sn` varchar (
30) default '' comment '
專案sn',
`user_sn` varchar (
30) default '' comment '
投票者sn',
`vote_time` datetime comment
'投票時間',
`visit_ip` varchar (
15) default '' comment '
投票者ip',
primary key (`rcd_id`),
key `idx_hc_vote_project_sn` (`project_sn`) using btree,
key `idx_hc_vote_user_sn` (`user_sn`) using btree
)engine=innodb default charset=utf8 comment '
專案投票記錄表
';
--alter tablealter table 表名 add [unique|fulltext|spatial] index 索引名(欄位名)
--例子
alter table table_name add index index_name (column_list)
alter table table_name add unique (column_list)
alter table table_name add primary key (column_list)
--create index
create [unique|fulltext|spatial] index 索引名 on 表名 (欄位名)
--例子
create index index_name on table_name (column_list)
create unique index index_name on table_name (column_list)
當所有不再使用時可以將其刪除。
drop index 索引名 on 表名;
show index from表名;show keys
from 表名;
結束!
資料庫原理之索引
在關係型資料庫中,索引是加快資料檢索的資料庫結構,主要用於提高效能。使用索引查詢資料,不需要再檢索整個資料庫,大大提高檢索效率。索引是乙個單獨的 物理的資料庫結構,是某個表中一列或若干列的集合以及相應標識這些資料頁邏輯指標清單。索引是依賴於表建立的,提供了資料庫中編排表中資料的內部方法。表的儲存有兩...
資料庫 資料庫索引原理
正確的建立合適的索引 是提公升資料庫查詢效能的基礎 4.b tree 在兩大引擎中的體現 5.索引的原則 索引是為了加速對錶中資料行的檢索而建立的一種分散儲存的資料結構。索引能極大的減少儲存引擎需要掃瞄的資料量 索引可以把隨機io變成順序io 索引可以幫助我們在進行分組 排序等操作時,避免使 用臨時...
資料庫原理 索引
一 索引的概念 索引就是加快檢索表中資料的方法。資料庫的索引類似於書籍的索引。在書籍中,索引允許使用者不必翻閱完整個書就能迅速地找到所需要的資訊。在資料庫中,索引也允許資料庫程式迅速地找到表中的資料,而不必掃瞄整個資料庫。二 索引的特點 1.索引可以加快資料庫的檢索速度 2.索引降低了資料庫插入 修...