索引官方定義:索引(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...