mySQL筆記(二十三) 索引1 簡介 結構 分類

2021-10-03 03:47:31 字數 1898 閱讀 4937

索引官方定義:索引(index)是幫助mysql高效獲取資料的資料結構

一般來說索引本身很大,不可能全部存在記憶體中,因此索引往往以索引檔案的形式儲存在磁碟上。

優勢:

提高資料檢索的效率,降低資料庫io成本;

通過索引對資料進行排序,降低資料排序的成本,降低了cpu消耗。

劣勢:

雖然索引大大提高了查詢速度,同時會降低更新表的速度。

實際上索引也是一張表,儲存了主鍵與索引字段,並指向實體表的記錄,所以需要占用空間。

索引結構:平衡樹結構

btree和b+tree的區別:

b樹的每個節點儲存索引資訊和資料;b+樹的非葉子節點中只儲存索引資訊,不儲存資料,資料只放在葉子節點中。

在b樹中,越靠近根節點的記錄查詢時間越快;而b+樹中每個記錄的查詢時間基本是一樣的,都需要從根節點走到葉子節點,而且在葉子節點中還要再比較關鍵字。

b+樹的非葉子節點不存放實際的資料,這樣每個節點可容納的元素個數比b樹多,樹高比b樹小,葉子節點存在鏈指標,可以減少磁碟訪問次數。

為什麼說b+樹比b樹更適合實際應用中作業系統的檔案索引和資料庫索引?

b+樹的磁碟讀寫代價更低

b+樹的查詢效率更穩定

時間複雜度:平衡樹的時間複雜度是logn

myisam的非聚簇索引的葉子節點中存放了資料,不用二次查詢。

索引分類:

單值索引:乙個索引只包含單個列,乙個表可以有多個單列索引。

唯一索引:索引列的值必須唯一,但允許有空值。

主鍵索引:設定為主鍵後資料庫會自動建立索引,innodb為聚簇索引。

復合索引:即乙個索引包含多個列。

基本語法:

#檢視索引

show index from 表名

#建立索引

create [inique] index [indexname] on 表名(欄位名)

#刪除索引

drop index [indexname] on 表名;

####使用alter命令

#1、新增乙個主鍵,索引值必須是唯一的,且不能為null

alter table tbl_name add prmary key(column_list);

#2、建立索引的值必須是唯一的(除了null之外,null可能會出現很多次)

alter table tbl_name add unique index_name(column_list);

#3、新增普通索引,索引值可出現多次

alter table tbl_name add index index_name(column_list);

#4、該語句指定索引為fulltext,用於全文索引

alter table tbl_name add fulltext index_name(column_list);

哪些情況需要建立索引:

主鍵自動建立唯一索引;

頻繁作為查詢條件的字段應該建立索引;

查詢中與其他表關聯的字段,外來鍵關係建立索引;

單鍵/組合索引的選擇問題,組合索引的價效比更高;

查詢中排序的字段,排序欄位若通過索引去訪問將大大提高排序速度;

查詢中統計或者分組字段。

哪些情況不需要建立索引:

表記錄太少

經常增刪改的表或字段

where條件裡用不到的字段不建索引

過濾性不好的不適合建索引

二十三 MySQL 事務

mysql 事務主要用於處理操作量大,複雜度高的資料。比如說,在人員管理系統中,你刪除乙個人員,你即需要刪除人員的基本資料,也要刪除和該人員相關的資訊,如信箱,文章等等,這樣,這些資料庫操作語句就構成乙個事務!一般來說,事務是必須滿足4個條件 acid 原子性 atomicity,或稱不可分割性 一...

二十三 MySQL賬戶管理

在生產環境下運算元據庫時,絕對不可以使用root賬戶連線,而是建立特定的賬戶,授予這個賬戶特定的操作許可權,然後連線進行操作,主要的操作就是資料的crud。mysql賬戶體系 根據賬戶所具有的許可權的不同,mysql的賬戶可以分為以下幾種 賬戶的操作主要包括建立賬戶 刪除賬戶 修改密碼 授權許可權等...

python 學習筆記(二十三)

coding utf8 author liwei import re python正則的應用,math方法判斷正則是否匹配成功 print 正則簡單用例 text hello liwei is 25 if re.match r w s w s w s d text print ok else pri...