6、索引設計原則
mysql官方對索引的定義為:索引(index)是幫助mysql高效獲取資料的資料結構(有序)。在資料之外,資料庫系統還維護者滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用(指向)資料, 這樣就可以在這些資料結構上實現高階查詢演算法,這種資料結構就是索引
一般來說索引本身也很大,不可能全部儲存在記憶體中,因此索引往往以索引檔案的形式儲存在磁碟上。索引是資料庫中用來提高效能的最常用的工具優勢
劣勢 索引是在mysql的儲存引擎層中實現的,而不是在伺服器層實現的。所以每種儲存引擎的索引都不一定完全相同,也不是所有的儲存引擎都支援所有的索引型別的。mysql目前提供了以下4種索引
型別說明
btree 索引
最常見的索引型別,大部分索引都支援 b 樹索引
hash 索引
只有memory引擎支援 , 使用場景簡單
r-tree 索引(空間索引)
空間索引是myisam引擎的乙個特殊索引型別,主要用於地理空間資料型別,通常使用較少,不做特別介紹
full-text (全文索引)
全文索引也是myisam的乙個特殊索引型別,主要用於全文索引,innodb從mysql5.6版本開始支援全文索引 索引
innodb引擎
myisam引擎
memory引擎
btree索引
支援支援
支援hash 索引
不支援不支援
支援r-tree 索引
不支援支援
不支援full-text
5.6版本之後支援
支援不支援
我們平常所說的索引,如果沒有特別指明,都是指b+樹(多路搜尋樹,並不一定是二叉的)結構組織的索引。其中聚集索引、復合索引、字首索引、唯一索引預設都是使用 b+tree 索引,統稱為 索引
型別說明
單值索引
即乙個索引只包含單個列,乙個表可以有多個單列索引
唯一索引
索引列的值必須唯一,但允許有空值
復合索引
即乙個索引包含多個列
索引在建立表的時候,可以同時建立, 也可以隨時增加新的索引,準備測試資料
語法
create
[unique
|fulltext|spatial]
index index_name
[using index_type]
on tbl_name(index_col_name,..
.)
在city表的city_name列建立乙個索引,索引名稱為idx_city_name
create
index idx_city_name on city(city_name)
;新增單值索引
alter
table tb_name add
index index_name(column_list)
;新增唯一索引
alter
table tb_name add
unique index_name(column_list)
;新增全文索引
語法
show
語法
drop
索引的設計可以遵循一些已有的原則,建立索引的時候請盡量考慮符合這些原則,便於提公升索引的使用效率,更高效的使用索引
建立復合索引舉例:
create
index idx_name_email_status on tb_seller(name,email,
status);
就相當於
對name 建立索引 ;
對name , email 建立了索引 ;
對name , email,
status 建立了索引 ;
mysql 索引 二 2 MySQL索引
一 索引介紹 索引是一種資料結構,用於幫助我們在大量資料中快速定位到我們想要查詢的資料。索引在mysql中也叫做 鍵 是儲存引擎用於快速找到記錄的一種資料結構。索引對於良好的效能非常關鍵,尤其是當表中的資料量越來越大時,索引對於效能的影響愈發重要。索引優化應該是對查詢效能優化最有效的手段了。索引能夠...
2 mysql(索引 儲存引擎)
課程大綱 1 在功能上的分類 聚簇索引 建表時,指定了主鍵列,mysql innodb 會將主鍵作為聚簇索引列 如果沒有主鍵,會選擇唯一鍵作為聚集索引。輔助索引 1 單列輔助索引 2 聯合索引 多個列作為索引條件,生成索引樹,理論上設計的好的,可以減少大量的回表查詢 注 聯合索引注意最左原則,inx...
MySQL學習筆記 2 MySQL高階
mysql學習筆記 2 mysql高階 1.mysql資料庫邏輯結構 innodb儲存的邏輯結構包括 表空間 table space 段 segment 區 extent 塊 頁 block page 預設情況下,所有資料都儲存在共享表空間中。如果設定了innodb file per table,每...