关于mysql索引

最近写了很多关于mysql的查询,联表等,所以索性对mysql方面开始巩固复习一下,,其实关于索引一直只知道怎么用,具体干啥却不是很了解,QAQ。

关于MySQL索引
**

mysql索引(index)是什么

**

索引是一种特殊的数据库结构,由数据库表中的一列或多列组合而成,可以实现快速 查询数据表中的特定值的记录。
通过索引可以不用读整个数据库的所有信息,而是直接查询索引列,这样不仅大大节省了查询的时间,还提高了整个项目的效率。
不是很李姐的同学们,可以比作字典,例如要查字典中的某一个字(数据库中的某条记录),如果没有音序表(索引),就要不厌其烦的翻找几百上千页,而如果有音序表,则大大节省了我们的时间和效率。

关于索引的优点

总结一下:

  1. 减少服务器扫描数量,提高效率
  2. 避免排序和创建临时表
  3. 将随机IO变为顺序IO
  4. 可以让查询锁更少的元组,提高表访问并发性
  5. 通过创建唯一索引,保证数据库每一条数据的唯一性
  6. 加速表与表之间的连接,比如说联查。
  7. 优化隐藏器,提高系统性能

有优点自然也有缺点

  1. 创建和维护索引需要花费大量的时间
  2. 创建索引除了占用数据空间,还要占用物理空间(聚簇索引占用的物理空间更大)
  3. 做增删改时,修改了表数据,相应的索引也要进行修改(索引只是增加了查询,对增删改并没有提升)
  4. 对于非常小的表,索引的意义非常小。

所以我们要找对适合的索引处:

总而言之分为几大类:经常需要搜索的列,主键列,经常用在连接(JOIN)的列,经常需要根据范围搜索的列,经常需要排序的列,经常使用在WHERE子句中的列。

索引分类

逻辑分类

主键索引

ALTER TABLE TableName ADD PRIMARY KEY(column_list);

唯一索引:数据列不允许重复,允许为 NULL 值,一张表可有多个唯一索引,索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。

CREATE UNIQUE INDEX IndexName ON TableName(字段名(length));
或者 ALTER TABLE TableName ADD UNIQUE (column_list);

物理分类

非聚簇索引和聚簇索引。
## 聚簇索引

聚簇是为了提高某个属性(或属性组)的查询速度,把这个或这些属性(称为聚簇码)上具有相同值的元组集中存放在连续的物理块。

聚簇索引是一种数据存储方式,这种存储方式是靠B+树来实现的,把主表的主键构造成一棵B+树且B+树的树叶构成表的行记录数据时,则为聚簇索引(数据和索引是结合的)

   ##非聚簇索引

非聚簇索引,数据和索引是分开的,B+树叶子节点存放的不是数据表的行记录

聚簇索引优缺点

优点: 数据访问更快。(索引与数据在同一个B+树中,访问更快)
对于主键的排序查找和范围查找速度更快

缺点: 插入速度严重依赖于插入顺序 更新主键代价高 二级索引访问需要两次索引查找

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小菜鸟向前飞

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

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

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

打赏作者

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

抵扣说明:

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

余额充值