数据库索引及引擎(Mysql)

1.什么是索引?

在数据库中,索引的含义与日常意义上的“索引”一词并无多大区别(想想小时候查字典),它是用于提高数据库表数据访问速度的数据库对象
A)索引可以避免全表扫描。多数查询可以仅扫描少量索引页及数据页,而不是遍历所有数据页。
B)对于非聚集索引,有些查询甚至可以不访问数据页。
C)聚集索引可以避免数据插入操作集中于表的最后一个数据页。
D)一些情况下,索引还可用于避免排序操作。

当然,众所周知,虽然索引可以提高查询速度,但是它们也会导致数据库系统更新数据的性能下降,因为大部分数据更新需要同时更新索引。

2.索引的类型

A)聚集索引,表数据按照索引的顺序来存储的。对于聚集索引,叶子结点即存储了真实的数据行,不再有另外单独的数据页。
B)非聚集索引,表数据存储顺序与索引顺序无关。对于非聚集索引,叶结点包含索引字段值及指向数据页数据行的逻辑指针,该层紧邻数据页,其行数量与数据表行数据量一致。

在一张表上只能创建一个聚集索引,因为真实数据的物理顺序只可能是一种。如果一张表没有聚集索引,那么它被称为“堆集”( H e a p Heap Heap)。这样的表中的数据行没有特定的顺序,所有的新行将被添加到表的末尾位置。

3. 索引的实现

索引的实现通常使用 B B B树及其变种 B + B+ B+树。
数据库索引的实现原理
数据库索引原理及优化

4.索引的优缺点

优点:

  • 1. 1. 1.创建唯一性索引,保证数据库表中每一行数据的唯一性

  • 2. 2. 2.大大加快数据的检索速度,这也是创建索引的最主要的原因

  • 3. 3. 3.加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

  • 4. 4. 4.在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

缺点:

  • 1. 1. 1.索引创建在表上,不能创建在视图上

  • 2. 2. 2.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加

  • 3. 3. 3.索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大

  • 4. 4. 4.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度

5.Mysql两种引擎的区别

I n n o d b Innodb Innodb引擎概述

  • I n n o d b Innodb Innodb引擎提供了对数据库 A C I D ACID ACID事务的支持,并且实现了 S Q L SQL SQL标准的四种隔离级别。该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它本身其实就是基于 M y S Q L MySQL MySQL后台的完整数据库系统, M y S Q L MySQL MySQL运行时 I n n o d b Innodb Innodb会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎不支持 F U L L T E X T FULLTEXT FULLTEXT类型的索引,而且它没有保存表的行数,当 S E L E C T SELECT SELECT C O U N T ( ∗ ) COUNT(*) COUNT() F R O M FROM FROM T A B L E TABLE TABLE时需要扫描全表。当需要使用数据库事务时,该引擎当然是首选。由于锁的粒度更小,写操作不会锁定全表,所以在并发较高时,使用 I n n o d b Innodb Innodb引擎会提升效率。但是使用行级锁也不是绝对的,如果在执行一个 S Q L SQL SQL语句时 M y S Q L MySQL MySQL不能确定要扫描的范围, I n n o D B InnoDB InnoDB表同样会锁全表。

M y I S A M MyISAM MyISAM引擎概述

  • M y I S A M MyISAM MyISAM M y S Q L MySQL MySQL默认的引擎,但是它没有提供对数据库事务的支持,也不支持行级锁和外键,因此当 I N S E R T INSERT INSERT(插入)或 U P D A T E UPDATE UPDATE(更新)数据时即写操作需要锁定整个表,效率便会低一些。不过和 I n n o d b Innodb Innodb不同, M y I S A M MyISAM MyISAM中存储了表的行数,于是 S E L E C T SELECT SELECT C O U N T ( ∗ ) COUNT(*) COUNT() F R O M FROM FROM T A B L E TABLE TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。如果表的读操作远远多于写操作且不需要数据库事务的支持,那么 M y I S A M MyISAM MyISAM也是很好的选择。

简单介绍区别

  • 1. 1. 1. M y I S A M MyISAM MyISAM是非事务安全的,而 I n n o D B InnoDB InnoDB是事务安全的

  • 2. M y I S A M 2.MyISAM 2.MyISAM锁的粒度是表级的,而 I n n o D B InnoDB InnoDB支持行级锁

  • 3. M y I S A M 3.MyISAM 3.MyISAM支持全文类型索引,而 I n n o D B InnoDB InnoDB不支持全文索引

  • 4. M y I S A M 4.MyISAM 4.MyISAM相对简单,效率上要优于 I n n o D B InnoDB InnoDB,小型应用可以考虑使用 M y I S A M MyISAM MyISAM

  • 5. M y I S A M 5.MyISAM 5.MyISAM表保存成文件形式,跨平台使用更加方便

应用场景:

  • 1. M y I S A M 1.MyISAM 1.MyISAM管理非事务表,提供高速存储和检索以及全文搜索能力,如果再应用中执行大量 s e l e c t select select操作,应该选择 M y I S A M MyISAM MyISAM
  • 2. I n n o D B 2.InnoDB 2.InnoDB用于事务处理,具有 A C I D ACID ACID事务支持等特性,如果在应用中执行大量 i n s e r t insert insert u p d a t e update update操作,应该选择 I n n o D B InnoDB InnoDB

参考:Mysql的两种引擎的区别
数据库常见面试题(附答案)
漫谈数据库索引

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值