mysql官方對索引的定義:索引(index)是幫助mysql高效獲取資料的資料結構。因此索引的本質就是資料結構。索引的目的在於提高查詢效率,可模擬字典、書籍的目錄等這種形式。
可簡單理解為「排好序的快速查詢資料結構」。在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式指向資料,這樣就可以在這些資料結構上實現高階查詢演算法,這種資料結構就是索引。
一般來說,索引本身也很大,不可能全部儲存在記憶體中,因此索引往往以索引檔案的形式儲存在磁碟上。
平常所說的索引,如果沒有特別指明,都是b樹索引。其中聚集索引、次要索引、覆蓋索引、字首索引、唯一索引預設都是用b樹。
通過show index from tablename可以檢視表的索引情況。
優點①類似大學圖書館的書目索引,提高資料的檢索效率,降低資料庫的io成本。
②通過索引列對資料進行排序,降低資料的排序成本,從而降低cpu的消耗。
缺點①索引實際上也是一張表,該錶儲存了主鍵與索引字段,並指向實體表的記錄,所以索引列也要占用空間。
②雖然索引大大提高了查詢效率,但是降低了更新表的速度,如insert、update和delete操作。因為更新表時,mysql不僅要儲存資料,還要儲存索引檔案每次更新的索引列欄位,並且在更新操作後,會更新相應字段索引的資訊。
③索引只是提高查詢效率的乙個因素,如果你的mysql有大量的資料表,就需要花時間研究建立最優秀的索引或優化查詢語句。
索引主要分為以下三類:
①單值索引:乙個索引只包含單個列,乙個表可以有多個單值索引。
②唯一索引:索引列的值必須唯一,但允許有空值,主鍵就是唯一索引。
③復合索引:乙個索引包含多個列
索引的結構:
①btree索引;②hash索引;③full-text索引;④r-tree索引。
①建立索引
create [unique] index indexname on tablename(columnname(length));注:如果是char、varchar型別的字段,length可以小於字段實際長度;如果是blob、text型別,必須指定length。alter table tablename add index indexname (columnname(length));
②刪除索引
drop index indexname on tablename;③檢視索引
show index from tablename;④其他建立索引的方式
1.新增主鍵索引①需建立索引的情況alter table `table_name` add primary key (`column`)
2.新增唯一索引
alter table `table_name` add unique (`column`)
3.新增全文索引
alter table `table_name` add fulltext (`column`)
4.新增普通索引
alter table `table_name` add index index_name (`column` )
5.新增組合索引
alter table `table_name` add index index_name (`column1`, `column2`, `column3`)
#1.主鍵自動建立唯一索引。
#2.頻繁作為查詢條件的字段。
#3.查詢中與其他表關聯的字段,外來鍵關係建立索引。
#4.高併發下趨向建立組合索引。
#5.查詢中排序的字段,排序欄位若通過索引去訪問將大大提高排序速度。
#6.查詢中統計或分組字段。
②不需要建立索引的情況
#1.表記錄太少。(資料量太少mysql自己就可以搞定了)
#2.經常增刪改的表。
#3.資料重複且平均分配的字段,如國籍、性別,不適合建立索引。
#4.頻繁更新的字段不適合建立索引。
#5.where條件裡用不到的字段不建立索引。
mysql高階 三 索引
索引在mysql調優中佔著至關重要的作用,所以深入了解索引對我們來說也是非常重要 1.1索引是什麼?mysql官方對索引的定義 索引 index 是幫助mysql高效獲取資料的資料結構。因此索引的本質就是資料結構。索引的目的在於提高查詢效率,可模擬字典 書籍的目錄等這種形式,可以簡單理解為排好序的快...
MySQL高階知識(五) 索引分析
首先建立三張表 tb emp 職工表 tb dept 部門表 和tb desc 描述表 1 tb emp表。drop table if exists tb emp create table tb emp id int 11 not null auto increment,username varch...
MySQL高階知識(五) 索引分析
前言 前面已經學習了explain 執行計畫 的相關知識,這裡利用explain對索引進行優化分析。首先建立三張表 tb emp 職工表 tb dept 部門表 和tb desc 描述表 1 tb emp表。drop table if exists tb emp create table tb em...