MySQL索引类型

1.索引类型

 - 从索引存储结构来分:B Tree索引, Hash索引,FULLTEXT全文索引,R Tree索引
 - 从应用层划分:普通索引,主键索引,唯一索引,复合索引
 - 从索引键值类型划分:主键索引,辅助索引(二级索引)
 - 从数据存储和索引键值逻辑关系划分:聚簇索引、非聚簇索引
1.1.普通索引:基于普通字段创建的索引,没有任何限制
创建普通索引的方式如下:

 - CREATE INDEX<索引的名字> ON tablename(字段名)- ALTER TABLE tablename ADD INDEX[索引的名字](字段名)
 - CREATE TABLE tablename([...],INDEX[索引的名字](字段名)); 

1.2 唯一索引:索引字段的值必须唯一,但允许有空值。
在创建或修改表时追加唯一约束,就会自动创建对应的唯一索引。
创建唯一索引的方法如下:

 - CREATE UNIQUE INDEX <索引的名字> ON tablename (字段名);
 - ALTER TABLE tablename ADD UNIQUE INDEX [索引的名字] (字段名);
 - CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (字段名) ;
1.3 主键索引
它是一种特殊的唯一索引,不允许有空值。
在创建或修改表时追加主键约束即可,每个表只能有一个主键。

创建主键索引的方法如下:

 - CREATE TABLE tablename ( [...], PRIMARY KEY (字段名) );
 - ALTER TABLE tablename ADD PRIMARY KEY (字段名);
1.4 复合索引
单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上。
用户可以在多个列上建立索引,这种索引叫做组复合索引(组合索引)。
复合索引可以代替多个单一索引,相比多个单一索引复合索引所需的开销更小。

索引同时有两个概念叫做窄索引和宽索引,窄索引是指索引列为1-2列的索引,宽索引也就是索引列超过2列的索引。
设计索引的一个重要原则就是能用窄索引不用宽索引,因为窄索引往往比组合索引更有效

1.41 创建组合索引的方法如下:

 - CREATE INDEX <索引的名字> ON tablename (字段名1,字段名2...);
 - ALTER TABLE tablename ADD INDEX [索引的名字] (字段名1,字段名2...);
 - CREATE TABLE tablename ( [...], INDEX [索引的名字] (字段名1,字段名2...) );
 
1.42 复合索引使用注意事项:
 - 何时使用复合索引,要根据where条件建索引,注意不要过多使用索引,过多使用会对更新操作效率有很大影响。
 - 如果表已经建立了(col1,col2),就没有必要再单独建立(col1);
  如果现在有(col1)索引,如果查询需要col1和col2条件,可以建立(col1,col2)复合索引,对于查询有一定提高。
1.5 全文索引
查询操作在数据量比较少时,可以使用like模糊查询,但是对于大量的文本数据检索,效率很低。
如果使用全文索引,查询速度会比like快很多倍。
在MySQL 5.6 以前的版本,只有MyISAM存储引擎支持全文索引,从MySQL 5.6开始MyISAM和InnoDB存储引擎均支持。

1.51创建全文索引的方法如下:

 - CREATE FULLTEXT INDEX <索引的名字> ON tablename (字段名); 
 - ALTER TABLEt ablename ADD FULLTEXT [索引的名字] (字段名); 
 - CREATE TABLE tablename ( [...],FULLTEXT KEY [索引的名字] (字段名) ; 
 - 和常用的like模糊查询不同,全文索引有自己的语法格式,使用 match 和 against 关键字,比如
   select * from user where match(name) against('aaa');

1.52 全文索引使用注意事项:

 - 全文索引必须在字符串、文本字段上建立。
 - 全文索引字段值必须在最小字符和最大字符之间的才会有效。(innodb:3-84;myisam:4-84- 全文索引字段值要进行切词处理,按syntax字符进行切割,例如b+aaa,切分成b和aaa
 - 全文索引匹配查询,默认使用的是等值匹配,例如a匹配a,不会匹配ab,ac。如果想匹配可以在布尔模式下搜索a*
    select * from user where match(name) against('a*' in boolean mode);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酆都小菜鬼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值