資料庫基礎之索引(一)

2021-09-26 09:17:02 字數 2163 閱讀 1495

一 什麼是索引

索引是對資料庫一列值或多列值進行排序的一種結構。索引是乙個單獨的,物理的資料結構,它是表中一列值或若干列值得集合以及指向表中物理標識這些值的資料頁的邏輯指標清單。

即索引=索引列集合+指向資料表的指標

二 索引有多少種

直接建立:create index indexname on tablename(列名(length));如果是varchar,char型別,length可以小於實際長度,但是blob和text型別要指定長度,超過一定值會儲存到外存導致效能下降。

修改表結構建立:alter table tablename add index indexname (列名(length));

建表時建立:

create table test(

id int not null,

username varchar(255) not null,

index indexname (列名(length))

);刪除索引:drop index indexname on tablename

直接建立:create unique index indexname on tablename(列名(length));

修改表結構建立:alter table tablename add uniqueindexname (列名(length));

建表時建立:

create table test(

id int not null,

username varchar(255) not null,

unique indexname (列名(length))

);而不會存在city,age這樣的索引,因為組合索引遵循的是最左字首原則,如果sql語句中第乙個引數不是組合索引的最左列,sql查詢則不會走索引

sql會走索引:

select * from mytable where username=?and city=?

select * from mytable where username=? and city=?andage=?

sql不走索引:

select * from mytable where city=? and age=?

select * from mytable where city=?

三 聚集索引和非聚集索引

四 聚集索引和非聚集索引的常見問題

第一:聚集索引的約束是唯一性,是否要求欄位也是唯一的呢?不唯一

分析:聚集索引可以建立在任何一列上。如果設定主鍵時沒有強制使用非聚集索引,資料庫會預設在上面建立聚集索引,導致認為聚集索引的列一定唯一

第二:為什麼聚集索引可以建立在任何一列上,如果此表沒有主鍵約束,即有可能存在重複行資料呢?分析:如果未用unique屬性建立聚集索引,資料庫引擎會自動向表中新增乙個四位元組的uniqueifier列

當可能出現重複時,資料庫引擎會自動向行裡新增乙個uniqueifier值,使每個鍵唯一。這個值對使用者不可見

第三:是不是聚集索引就一定要比非聚集索引效能優呢?

如果想查詢學分在60-90之間的學生的學分以及姓名,在學分上建立聚集索引是否是最優的呢?

分析:否。既然只輸出兩列,我們可以在學分以及學生姓名上建立聯合非聚集索引,此時的索引就形成了覆蓋索引,即索引所儲存的內容就是最終輸出的資料,這種索引在比以學分為聚集索引做查詢效能更好

第四:在資料庫中通過什麼描述聚集索引與非聚集索引的?

分析:索引是通過b樹的形式進行描述的,聚集索引的節點存放的是資料節點,非聚集索引存放的是索引節點,包含指向資料頁的指標。

第五:在主鍵是建立聚集索引的表在資料插入上為什麼比主鍵上建立非聚集索引表速度要慢?

分析:由於主鍵的唯一性約束,在插入的時候要遍歷所有行,由於聚集索引存放的是資料節點,而非聚集索引存放的是索引節點,遍歷資料頁要比遍歷索引頁耗時,所以聚集索引的插入要比非聚集索引的插入速度慢

資料庫基礎 之 「索引」

索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊。資料庫索引好比是一本書前面的目錄,能加快資料庫的查詢速度。例如這樣乙個查詢 select from table1 whereid 44。如果沒有索引,必須遍歷整個表,直到id等於44的這一行被找到為止 有了索...

資料庫之索引

1 索引的出現其實就是為了提高資料查詢的效率,就像書的目錄一樣。2 索引的出現是為了提高查詢效率,但是實現索引的方式卻有很多種,所以這裡也就引入了索引模 型的概念。可以用於提高讀寫效率的資料結構很多,這裡我先給你介紹三種常見 也比較簡單的 資料結構,它們分別是雜湊表 有序陣列和搜尋樹。2 雜湊表 假...

資料庫之 索引

資料庫為什麼要有索引?答 用於提高資料庫表的資料訪問速度。資料庫索引的資料結構基礎是b tree 多叉樹 b tree結構如下圖 ps 源自網路 索引是針對資料庫表中的某一列或多列建立的。建立索引 create index from tablename tableparam 建立多列索引 creat...