mysql索引以及mysql存儲引擎MyISAM 與 InnoDB區別

MySQL索引的分類
我們根據對以列屬性生成的索引大致分爲兩類:

單列索引 :以該表的單個列,生成的索引樹,就稱爲該表的單列索引
組合索引:以該表的多個列組合,一起生成的索引樹,就稱爲該表的組合索引

單列索引和組合索引具體細的劃分:
主鍵索引(單):以該表主鍵生成的索引樹,就稱爲該表的主鍵索引
唯一索引(單):以該表唯一列生成的索引樹,就稱爲該表的唯一索引
普通索引(單):以該表的普通列(非主鍵,非唯一列)生成的索引樹,就稱爲該表的普通索引
全文索引(單,雙):全文搜索,可以單列也可以多列一起使用
前綴索引(單):前綴索引一般只能用於普通索引當中,以最左匹配爲原則
組合索引(雙):是用多個列組合構建的索引



# 修改表
alter table {table_name} add primary key ( `column` );  #主鍵索引 
alter table {table_name} add unique index {index_name}({column_name}); # 唯一索引
alter table {table_name} add index {index_name}({column_name});        # 普通索引
alter table {table_name}  ADD FULLTEXT index remark_fulltext(remark);  #全文索引
alter table {table_name} add key(column_name(prefix_length));  #前綴索引
alter table {table_name} add index group_index(`tel`,`email`);  #組合索引

全文索引有自己的語法格式,使用 match 和 against 關鍵字,比如
select * from {table_name}  where match(remark)  against('xxx');

注意: match() 函數中指定的列必須和全文索引中指定的列完全相同,否則就會報錯,無法使用全文索引,這是因爲全文索引不會記錄關鍵字來自哪一列。如果想要對某一列使用全文索引,請單獨爲該列創建全文索引。

前綴索引壞處:MySQL 不能在 ORDER BY 或 GROUP BY 中使用前綴索引,也不能把它們用作覆蓋索引(Covering Index)。

索引底層和組合索引具體看我的博客:https://blog.csdn.net/qq_39291929/article/details/100132979

問題1:給一個行字符串加索引,請問可以建立那些索引?
答:普通索引
前綴索引、全文索引


mysql存儲引擎MyISAM 與 InnoDB區別?

MyISAM
1、不支持事務
2、只支持表級別鎖
3、保存數據庫表中表的具體行數(不需要全盤掃描)
4、只適合插入不頻繁,查詢非常頻繁查詢
5、不支持外鍵

InnoDB
1、支持事務
2、支持行級別鎖(必須建立索引基礎上)

3、支持外鍵

爲什麼MylSAM查詢效率比InnoDB效率高?

1、innodb尋址要映射到塊,再到行,MYISAM記錄的直接是文件的OFFSET,定位比INNODB要快

2、INNODB還需要維護MVCC一致;需要去檢查和維護

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章