varchar 索引_MySQL总结02:索引

索引

索引是一种特殊的、存储在磁盘上的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录,通过索引,查询数据时不用读完记录的所有信息,而只是查询索引列

为什么要用索引

索引就是根据表中的一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表,实质上是一张描述索引列的列值与原表中记录行之间一 一对应关系的有序表,是数据库性能调优技术的基础

索引类型

主键索引 Primary Key

InnoDB存储引擎的表存在主键,若建表的时候没有指定主键,则使用第一非空的唯一索引作为主键索引,否则InnoDB会自动创建一个不可见的、长度为6字节的row_id作为主键索引

SQL SERVER默认是在主键上建立聚集索引的, 这样做好处是可以让数据在数据库中按照ID进行物理排序

聚集索引的最大好处就是能够根据查询要求,迅速缩小查询范围,避免全表扫描,在实际应用中,因为ID号是自动生成的,我们并不知道每条记录的ID号,所以我们很难在实践中用ID号来进行查询,这就使让ID号这个主键作为聚集索引成为一种资源浪费

单列索引

一个索引只包含单个列

组合索引

在表的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用。使用组合索引时遵循最左前缀原则

最左匹配原则

最左优先,以最左边的为起点任何连续的索引都能匹配上,遇到范围查询(>、

例如:b = 2为查询条件时, 若建立(a,b)顺序的索引,就匹配不到(a,b)的索引;但是如果查询条件是a = 1 and b = 2或者a=1(又或者是b = 2 and b = 1)就可以,因为优化器会自动调整a,b的顺序;再比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,因为c字段是一个范围查询,它之后的字段会停止匹配

最左匹配原则的原理

最左匹配员额时针对组合索引来说的,先了解联合索引的原理:

索引的底层时B+树, 联合索引的健值数量不是一个,而是多个,构建一颗B+树只能根据一个值来构建,因此数据库依据联合索引最左的字段来构建B+树

唯一索引 Unique

索引列的值必须唯一,允许有空值。若是组合索引,则列值的组合必须唯一

主键索引是一种特殊的唯一索引,不允许有空值

普通索引 Key

MySQL中的基本索引类型,允许在定义索引的列中插入重复值和空值

全文索引 FULLTEXT

在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值。全文索引可以在CHAR、VARCHAR或者TEXT类型的列上创建

空间索引 SPATIAL

对空间数据类型的字段建立的索引,MySQL中的空间数据类型有4种,分别是GEOMETRY、POINT、LINESTRING和POLYGON

MySQL使用SPATIAL关键字进行扩展,使得能够用于创建正规索引类似的语法创建空间索引。创建空间索引的列必须声明为NOT NULL

创建索引

创建表时建立

创建普通索引
CREATE TABLE test.`user` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `username` varchar(50) DEFAULT NULL,  `sex` varchar(5) DEFAULT NULL,  `address` varchar(100) DEFAULT NULL,  `birthday` datetime NOT NULL,  PRIMARY KEY (`id`),  index idx1(username));show index from test.`user`;
创建唯一索引
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值