(本人菜鳥一枚,如有理解不對,請大神多多指正!!!)
一、索引
1、什麼是索引?
答:索引類似於一本書的目錄,便於資料快速高效的查詢,也可以解釋為資料按照某個特定的規則去儲存排序資料
2 、索引的型別?
答:索引可以分為:普通索引,唯一索引,主鍵索引和組合索引
2.1 普通索引---最基本的一種索引方式,沒有什麼限制
有三種建立索引的方式:
①建立索引-create index indexname on tablename(columnname(length));
注:如果columnname為char或者varchar,則可以指定length小於實際長度(可以通過觀察發現從第幾個長度開始不重複,則 可將length定義為該長度),如果為boolean或text型別,則length長度則為實際長度。
②修改表結構新增索引-alter tablename add index indexname on (columnname(length));
③建立表的時候新增-即是在建立表的時候加入index indexname(columnname(length));
2.2 唯一索引---不同於普通索引,它所加的列的值必須是唯一的,但允許有空值。
有三種建立索引的方式:
①建立索引-create unique index indexname on tablename(columnname(length));
②修改表結構新增索引-alter tablename add unique indexname on (columnname(length));
③建立表的時候新增索引-即是在建立表的時候加入unique indexname(columnname(length));
2.3 主鍵索引-它是一種特殊的索引,值為唯一的,不能為空,一般是在建立表的時候進行新增
即是在建立表的時候加入primarykey (columnname);
2.4 組合索引-組合索引即是在多個列上加上索引,是為了進一步提公升mysql的查詢速度
alter table tablename add index name_age_city(name(10),age,city);
假如name的長度為15,這裡將name長度改為10是因為name的長度一般是不超過10的,這樣做可以加快mysql的索引查詢速度,還可以減少索引檔案的大小,也可以提公升insert的速度!!!
二、索引原理
舉個例子:乙個資料庫共有5000 000條記錄,id int(4),name char(50),othername char(50),address char(100)。每條記錄需要分配204個位元組,假設儲存在myisam資料庫中,則這個資料庫塊大小預設為b=1024位元組。於是,我們可以計算出這個表的分塊因數為bfr=(b/r)=1024/204=5,即磁碟的每個資料塊儲存的記錄為5條,那麼儲存整個表所需的資料塊數是 n=r/bfr=5000000/5=1000 000。
使用線性查詢索引id欄位--這個欄位是鍵字段(每個欄位的值是唯一的),需要訪問n/2=500000個資料塊才能找到目標值。不過因為這個欄位是經過排序的,所以可以使用二分查詢法,而這樣平均只需要訪問log2 1000000=19.93=20個塊,顯然效能極大的提公升了。
再看一下name這個字段,它是未經過排序的,因此不能通過二分法進行查詢,而且欄位的值也不是唯一的,所以要從頭查到尾,既需要訪問100000個資料塊。這種情況通過建立索引就可以得到改善。
故:當鍵字段唯一時,可以減少一半的查詢。當這個字段排序過,則只需要log2 n個塊的查詢
(b樹和b+樹以後會補上的^_^!!)
MySQL索引原理之索引原理
索引定義 是儲存引擎用於快速查詢記錄的一種資料結構。需要額外開闢空間和資料維護工作。索引是物理資料頁儲存,在資料檔案中 innodb,ibd檔案 利用資料頁 page 儲存。索引可以加快檢索速度,但是同時也會降低增刪改操作速度,索引維護需要代價。索引涉及的理論知識 二分查詢法 hash和b tree...
mysql索引 mysql索引實現原理
什麼是索引 索引是一種高效獲取資料的儲存結構,例 hash 二叉 紅黑。mysql為什麼不用上面三種資料結構而採用b tree 若僅僅是 select from table where id 45 上面三種演算法可以輕易實現,但若是select from table where id 6 就不好使了...
Mysql 索引原理與詳解
索引的原理 索引的優點和缺點和使用原則 索引優點 索引缺點 使用原則 什麼時候新增索引 索引的分類 普通索引 index 使用規則 1.乙個表中可以有多個index欄位 2.欄位的值可以有重複,也可以為null值。字段值無約束 3.經常把做查詢條件的字段設定為index欄位 4.index欄位的ke...