MySQL索引基本概念和操作

2021-09-09 07:37:12 字數 4857 閱讀 4312

資料庫最常見的訪問方式就是順序訪問和索引訪問。乙個表最多可有16個索引,最大 索引長度是256個位元組。

順序訪問就是一行一行的瀏覽表,非常浪費時間,效率低。索引訪問只是讀取那些表現了所需特性的行,就像目錄,只需要看所需要的章節,而不是從第一頁開始找。

索引是對資料庫表中一列或多列的值進行排序的一種結構,例如 employee 表的姓(name)列。如果要按姓查詢特定職員,與必須搜尋表中的所有行相比,索引會幫助您更快地獲得該資訊。

索引是乙個單獨的、物理的資料庫結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。 索引提供指向儲存在表的指定列中的資料值的指標,然後根據您指定的排序順序對這些指標排序。資料庫使用索引的方式與您使用書籍中的索引的方式很相似:它搜尋索引以找到特定值,然後順指標找到包含該值的行。 在資料庫關係圖中,您可以在選定表的「索引/鍵」屬性頁中建立、編輯或刪除每個索引型別。當儲存索引所附加到的表,或儲存該錶所在的關係圖時,索引將儲存在資料庫中。

可以基於資料庫表中的單列或多列建立索引。多列索引使您可以區分其中一列可能有相同值的行。 如果經常同時搜尋兩列或多列或按兩列或多列排序時,索引也很有幫助。例如,如果經常在同一查詢中為姓和名兩列設定判據,那麼在這兩列上建立多列索引將很有意義。 確定索引的有效性: 檢查查詢的 where 和 join 子句。在任一子句中包括的每一列都是索引可以選擇的物件。 對新索引進行試驗以檢查它對執行查詢效能的影響。 考慮已在表上建立的索參數量。最好避免在單個表上有很多索引。 檢查已在表上建立的索引的定義。最好避免包含共享列的重疊索引。 檢查某列中唯一資料值的數量,並將該數量與表中的行數進行比較。比較的結果就是該列的可選擇性,這有助於確定該列是否適合建立索引,如果適合,確定索引的型別。

建立索引的優點:

1.大大加快資料的檢索速度;

2.建立唯一性索引,保證資料庫表中每一行資料的唯一性;

3.加速表和表之間的連線;

4.在使用分組和排序子句進行資料檢索時,可以顯著減少查詢中分組和排序的時間。

索引型別:

根據資料庫的功能,可以在資料庫設計器中建立四種索引:唯一索引、非唯一索引、主鍵索引和聚集索引。 儘管唯一索引有助於定位資訊,但為獲得最佳效能結果,建議改用主鍵或唯一約束。

1、普通索引(index):

這是最基本的索引,沒有唯一性的限制

2、唯一索引(unique):

唯一索引是不允許其中任何兩行具有相同索引值的索引。 當現有資料中存在重複的鍵值時,大多數資料庫不允許將新建立的唯一索引與表一起儲存。資料庫還可能防止新增將在表中建立重複鍵值的新資料。例如,如果在 employee 表中職員的姓 (lname) 上建立了唯一索引,則任何兩個員工都不能同姓。

3、非唯一索引(index):

非唯一索引是相對唯一索引,允許其中任何兩行具有相同索引值的索引。 當現有資料中存在重複的鍵值時,資料庫是允許將新建立的索引與表一起儲存。這時資料庫不能防止新增將在表中建立重複鍵值的新資料。

4、主鍵索引(primary key):

資料庫表經常有一列或列組合,其值唯一標識表中的每一行。該列稱為表的主鍵。 在資料庫關係圖中為表定義主鍵將自動建立主鍵索引,主鍵索引是唯一索引的特定型別。該索引要求主鍵中的每個值都唯一。當在查詢中使用主鍵索引時,它還允許對資料的快速訪問。

5、全文索引(fulltext)

6、聚集索引(也叫聚簇索引):

在聚集索引中,表中行的物理順序與鍵值的邏輯(索引)順序相同。乙個表只能包含乙個聚集索引。 如果某索引不是聚集索引,則表中行的物理順序與鍵值的邏輯順序不匹配。與非聚集索引相比,聚集索引通常提供更快的資料訪問速度

一、建表時建立

create table 表名(

欄位名 資料型別 [完整性約束條件],

[unique | fulltext | spatial] index | key

[索引名](欄位名1 [(長度)] [asc | desc]) [using 索引方法]

說明:unique:可選。表示索引為唯一性索引。

fulltext:可選。表示索引為全文索引。

spatial:可選。表示索引為空間索引。

index和key:用於指定欄位為索引,兩者選擇其中之一就可以了,作用是    一樣的。

索引名:可選。給建立的索引取乙個新名稱。

欄位名1:指定索引對應的字段的名稱,該欄位必須是前面定義好的字段。

長度:可選。指索引的長度,必須是字串型別才可以使用。

asc:可選。表示公升序排列。

desc:可選。表示降序排列。

注:索引方法預設使用btree。

例1:單列索引(示例):

create table projectfile (

id int auto_increment comment '附件id',

fileuploadercode varchar(128) comment '附件上傳者code',

projectid int comment '專案id;此列受project表中的id列約束',

filename varchar (512) comment '附件名',

filesize bigint comment '附件大小,單位byte',

-- 主鍵本身也是一種索引(注:也可以在上面的建立欄位時使該字段主鍵自增)

primary key (id),

-- 主外來鍵約束(注:project表中的id欄位約束了此表中的projectid欄位)

foreign key (projectid) references project (id),

-- 給projectid欄位建立了唯一索引(注:也可以在上面的建立欄位時使用unique來建立唯一索引)

unique index (projectid),

-- 給fileuploadercode欄位建立普通索引

index (fileuploadercode)

-- 指定使用innodb儲存引擎(該引擎支援事務)、utf8字元編碼

) engine = innodb default charset = utf8 comment '專案附件表';

注:這裡只為示例如何建立索引,其他的合理性之類的先放一邊。

例2:組合索引(示例):

create table projectfile (

id int auto_increment comment '附件id',

fileuploadercode varchar(128) comment '附件上傳者code',

projectid int comment '專案id;此列受project表中的id列約束',

filename varchar (512) comment '附件名',

filesize bigint comment '附件大小,單位byte',

-- 主鍵本身也是一種索引(注:也可以在上面的建立欄位時使該字段主鍵自增)

primary key (id),

-- 建立組合索引

index (fileuploadercode,projectid)

-- 指定使用innodb儲存引擎(該引擎支援事務)、utf8字元編碼

) engine = innodb default charset = utf8 comment '專案附件表';

二、建表後建立

alter table 表名 add [unique | fulltext | spatial]  index | key  [索引名] (欄位名1 [(長度)] [asc | desc]) [using 索引方法];

或create  [unique | fulltext | spatial]  index  索引名 on  表名(欄位名) [using 索引方法]

例1:

-- 假設建表時fileuploadercode欄位沒建立索引(注:同乙個字段可以建立多個索引,但一般情況下意義不大)

-- 給projectfile表中的fileuploadercode建立索引

alter table projectfile add unique index (fileuploadercode);

例2:

--建立組合索引

alter table projectfile add index (fileuploadercode, projectid);

例3:

-- 將id列設定為主鍵

alter table index_demo add primary key(id) ;

-- 將id列設定為自增

alter table index_demo modify id int auto_increment;

show index from 表名;示例:

drop index 索引名 on 表名

alter table 表名 drop index 索引名

示例一:

drop index fileuploadercode1 on projectfile;
示例二

alter table projectfile drop index s2123;
原文參考:

包括:1、檢視sql語句對索引的使用情況(即:查詢sql的效能)

2、單列索引的使用

3、組合索引的使用

mysql索引的概念和作用 索引的基本概念及作用

索引 是乙個資料結構,用來快速訪問資料庫 或者檢視裡的資料,需要儲存空間。資料庫的索引的原理 主要用於提高查詢效率,也就是按條件查詢的時候,先查詢索引,或者檔案裡的不同位置的結構。索引會降低資料更新的效率,當插入 修改 刪除時會引起索引結構的更新 建立索引 create unique index i...

Mysql之索引的基本概念

一 索引是什麼?比如我們要在字典中找某一字,如何才能快速找到呢?那就是通過字典的目錄。對資料庫來說,索引的作用就是給 資料 加目錄。二 索引演算法 設有n條隨機記錄,不用索引,平均查詢n 2次,那麼用了索引之後呢?tree 二叉樹 索引 log2n hash 雜湊 索引 1 三 優缺點 優點 加快了...

Python基本概念和基本操作

for迴圈 python中需要注意的問題 參考文獻 變長,可接收任意物件 tuple value 有序可重複 value內容個數均不可變 list value 有序可重複 value內容個數均可變 1.查詢和插入的時間隨著元素的增加而增加 2.占用空間小,浪費記憶體很少 dict map 無序key...