mysql索引總結

2021-08-13 22:09:42 字數 2359 閱讀 2215

1.索引的概念:

它是乙個單獨的,儲存在磁碟上的資料結構,它們包含著對資料庫表裡所有記錄的引用指標,主要用於快速找出一列或者多列中有特定值的行,所有mysql列型別都可以被索引。

2.索引的儲存型別:

索引是在儲存引擎中實現的,mysql中索引的儲存型別有倆種:btree和hash,具體和表的儲存引擎相關,myisam和innodb儲存引擎只支援btree索引,memory/heap儲存引擎可以儲存btree和hash倆種索引。

3.索引的分類:

(1) 普通索引和唯一索引:普通索引可以在索引的列中插入重複的值和空值,唯一索允許有空值,主鍵索引不能為空。

(2) 單列索引和組合索引:乙個表可以多個單列索引,組合索引指在表的多個字段組合上建立的索引,只有在查詢時使用了這些欄位的左邊欄位時,索引才能被使用

(3) 全文索引:在定義索引的列上支援值的全文查詢,允許索引的列有重複值和空值,只能在列型別為char,varchar,text型別的列上建立,只有myisam儲存引擎支援全文索引。

(4) 空間索引

4.索引的設計原則:

(1) 索引並不是越多越好,不僅占用磁碟空間,對增加,修改,刪除效能也有影響,表的修改會導致索引的動態變化。

(2) 避免對經常更新的表使用過多的索引,經常查詢的字段應該建立索引,但要避免新增不必要的字段。

(3) 資料量小的表最好不要使用索引,反而會降低查詢速度。

(4) 在條件表示式中經常用到的不同值較多的列上建立索引,少的不要建立比如性別列男女倆項沒有必要建立索引。

(5) 在頻繁進行分組和排序的列上建立索引,如果待排序的字段有很多,可以在這些列上建立組合索引。

5.索引的建立:

(1)建立表的時候建立:

create table `tr_log_type` (

`id` varchar(32) not null comment '主鍵',

`log_id` varchar(32) default null comment '日誌id',

`vehicle_id` varchar(32) default null comment '車輛id',

primary key (`id`),

index(log_id) 普通索引,

unique index uni(log_id) 唯一索引,

index mindex(log_id,vehicle_id) 復合索引,

fulltext index findex(log_id) 全文索引

) (2) 表已經存在新新增索引:

第一種:alter table tr_log_type add index logidindex(log_id);

第二種:create index logidindex on tr_log_type(log_id);

6.索引的刪除:第一種:alter table tr_log_type drop index logidindex;

第二種:drop index logidindex on tr_log_type;

7.檢視索引:

show index from tr_log_type;

8.索引的優點:

(1) 通過建立唯一索引,可以保證資料庫表中每一行資料的唯一性。

(2) 可以大大提高資料的查詢速度

(3) 在實現資料的參考完整性方面,可以加速表與表之間的連線

(4) 在使用分組和排序子句進行查詢時,也可以顯著減少查詢中的分組和排序的時間

9.索引的缺點:

(1) 建立索引和維護索引要花費大量的時間,資料量越大花費的時間越多。

(2) 索引會占用磁碟空間。

(3) 當對表資料進行增加,修改,刪除,索引也要動態的維護,降低了資料的維護速度。

10.索引的建立位置:

索引一般建立在where和join字句以及order by 的字段上面

11.注意事項:

(1)使用全文索引注意事項:mysql預設的儲存引擎是innodb,如果想使用全文索引必須將儲存引擎修改為myisam

(2)使用組合索引注意事項:它遵從最左字首原則,利用索引中最左邊的列集匹配行,如果我們的組合索引為有id,name,age組成,

mysql能使用索引的組合為id,name,age

或則id,name或則id

(3)索引失效:like以%開頭

mysql 索引總結 mysql索引總結

mysql中每乙個表都有乙個聚簇索引clusted index,該所索引是預設建立的,除此之外的表上的每乙個非聚簇索引都是二級索引,又叫輔助索引 secondary indexes 以innodb來說,每個innodb表具有乙個特殊的索引稱為聚集索引,如果您的表上定義有主鍵,該主鍵索引是聚集索引,如...

mysql次級索引 MySQL 索引總結

1 索引是做什麼的?想象一下,你面前有本詞典,資料就是書的正文內容,你就是那個cpu,而索引,則是書的目錄 索引用於快速找出在某個列中有一特定值的行。不使用索引,mysql必須從第1條記錄開始然後讀完整個表直到找出相關的行。表越大,花費的時間越多。如果表中查詢的列有乙個索引,mysql能快速到達乙個...

mysql 索引總結

索引用來快速地尋找那些具有特定值的記錄,所有mysql索引都以b 樹的形式儲存。如果沒有索引,執行查詢時mysql必須從第乙個記錄開始掃瞄整個表的所有記錄,直至找到符合要求的記錄。表裡面的記錄數量越多,這個操作的代價就越高。如果作為搜尋條件的列上已經建立了索引,mysql無需掃瞄任何記錄即可迅速得到...