MySQL数据库:索引

一、索引

1.1索引的概念

索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址

 使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据,因此能加快数据库的查询速度。

  • 索引就好比是一本书的目录,可以根据目录中的页码快速找到所需的内容。
  • 索引是表中一列或者若干列值排序的方法。
  •  建立索引的目的是加快对表中记录的查找或排序。

1.2索引的作用

设置了合适的索引之后,数据库利用各种快速定位技术,能够大大加快查询速度,这是创建索引的最主要的原因。当表很大或查询涉及到多个表时,使用索引可以成千上万倍地提高查询速度。

  • 可以降低数据库的IO成本,并且索引还可以降低数据库的排序成本。
  • 通过创建唯一性索引,可以保证数据表中每一行数据的唯一性。
  • 可以加快表与表之间的连接。
  • 在使用分组和排序时,可大大减少分组和排序的时间。
  • 建立索引在搜索和恢复数据库中的数据时能显著提高性能。

1.3索引的副作用

  • 索引需要占用额外的磁盘空间。
  • 更改数据会花费更多时间,因为索引也会随之变动

1.4创建索引的原则依据

  • 表的主键、外键必须有索引
  • 记录数超过 300 行的表应该有索引
  • 经常与其他表进行连接的表,在连接字段上应该建立
  • 经常出现在where子句中的字段,特别是大表的字段应该建立索引
  • 索引应该建在选择性高的字段上
  • 索引唯一性太差的字段,不适合建立索引
  • 更新太频繁地字段,不适合创建索引
  • 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引

1.5索引的分类

  • 普通索引(Basic Index):没有特殊限制,单纯为了加速查询速度。
  • 唯一索引(Unique Index):索引的键值必须唯一,除了加速查询外还能保证数据的唯一性。
  • 主键索引(Primary Key Index):特殊的唯一索引,每个表只能有一个,不允许为空,并决定了聚集索引的顺序。
  • 组合索引(单列索引与多列索引)
  • 全文索引(Full-text Index):针对文本列的特殊索引,用于对文本内容进行全文搜索。

注:唯一索引和主键索引默认创建

1.6索引的创建

1.6.1普通索引的创建

CREATE INDEX 索引名 ON 表名 (列名[(length)]);
 
#(列名(length)):length是可选项。如果忽略 length 的值,则使用整个列的值作为索引。如果指定使用列前的 length 个字符来创建索引,这样有利于减小索引文件的大小。
 
#索引名建议以“_index”结尾。

1.6.2唯一索引的创建

CREATE UNIQUE INDEX 索引名 ON 表名(列名);

1.6.3主键索引

是一种特殊的唯一索引,必须指定为“PRIMARY KEY”

添加主键将自动创建主键索引

1.6.3.1创建表的时候指定

CREATE TABLE 表名 ([...],PRIMARY KEY (列名));

mysql> show create table haha;

1.6.4查看索引

show create table  表名;
 
 
show index from 表名;
show index from 表名\G; 竖向显示表索引信息
 
 
show keys from 表名;
show keys from 表名\G;

查看索引: 

竖向查看

1.6.5删除索引

1.6.5.1直接删除索引

DROP INDEX 索引名 ON 表名;

1.6.5.2修改表方式删除索引

ALTER TABLE 表名 DROP INDEX 索引名;

1.6.5.3删除主键索引

ALTER TABLE 表名 DROP PRIMARY KEY;

改之前

删除主键

没了

总结:

① 普通索引 :针对所有字段,没有特殊的需求/规则
② 唯一索引 : 针对唯一性的字段,仅允许出现一次空值
③ 组合索引 (多列/多字段组合形式的索引)
④ 全文索引(varchar char text)MySQL为了优化对文本内容搜索的一种机制
⑤ 主键索引 :针对唯一性字段、且不可为空,同时一张表只允许包含一个主键索引

创建索引:
① 在创建表的时候,直接指定 index
② alter修改表结构的时候,进行add 添加index
③ 直接创建索引 index
PS:主键索引——》直接创建主键即可

  • 19
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值