一 Innodb

1. 简介
索引是一种排好序的用于快速查找的数据结构。


**根据官网手册InnoDB支持B-tree索引、聚簇索引(Clustered indexes)、全文索引(Full-text search indexes)、不支持hash索引(InnoDB在内部利用哈希索引来实现其自适应哈希索引功能)、不支持T-tree索引。**Geospatial indexing support(坐标索引支持),支持索引缓存;
支持外键、支持事务。锁粒度是行锁。
2.聚簇索引

注:与myisam不同的是,Innodb叶子节点保存的是所有的数据。
每个Innodb表都有一个特殊的索引被称作聚簇索引,它存储了一行的数据。主键可以看做是索引的同义词,InnoDB会使用聚簇索引对DML操作进行优化:

  • 在表上定义主键时,Innodb将其作为聚簇索引;
  • 如果没有定义主键,MySQL将找到第一个UNIQUE索引,其中所有键列都是NOT NULL,而InnoDB将它用作聚簇索引。
  • 如果没有主键,也没有合适的索引。Innodb将使用行ID值生成列名为GEN_CLUST_INDEX的隐藏聚簇索引。它是一个6字节的字段,在插入新行时,单调增加。因此物理存储顺序就是其插入的顺序。

通过聚簇索引查找是很快的,因为索引直接指向包含所有数据的页。

3.辅助索引
除了聚簇索引之外,其它都被称为辅助索引(Secondary Indexes)。辅助索引中的每条记录都包含了一行的主键列及辅助索引指定的列。Innodb使用主键值搜索在聚簇索引中的某一行的值。因此有一个短的主键是更有利的。

4.索引的物理结构
除空间索引外,InnoDB索引是B-tree数据结构。 空间索引使用R-trees,R-trees是用于索引多维数据的专用数据结构。 索引记录存储在其B-tree或R-tree数据结构的叶子页中。 索引页的默认大小为16KB。
Innodb会剩下1/16的页空间,如果记录是顺序插入,索引页会利用15/16;如果是随机插入,会利用1/2到15/16。
通过设置MERGE_THRESHOLD,该值表示当页面的利用率降低到该值及以下时,会进行页面合并,节省空间。默认是50%。
也能通过设置innodb_page_size来设置页面大小。

5.排序索引构建
InnoDB执行批量加载,而不是在创建或重建索引时一次插入一个索引记录。 这种索引创建方法也称为排序索引构建(Sorted Index Builds)。 空间索引不支持排序索引构建。全文索引支持排序索引。
在排序索引构建构建期间,redo日志被禁用,但会设置一个检查点确保索引构建能忍受宕机或失败。

6.全文索引
InnoDB 全文索引(FULLTEXT)是一种倒排索引(inverted index),它储存单词列表,并为每个单词储存出现的文档列表。
具体倒排索引介绍可以查看文章:正排索引和倒排索引;

二 myisam引擎

1.索引
myisam支持B-tree索引、支持全文索引 (Full-text search indexes)、坐标索引支持 (Geospatial indexing support)、不支持聚簇索引、不支持hash索引、不支持T-tree索引。
另不支持外键、不支持事务。锁粒度是表锁。存储限制是256TB。
MyISAM表有以下特征:

  • MyISAM表的最大索引数量是64,每个索引最多16列;
  • BLOB and TEXT能被索引;
  • 索引列中允许使用NULL值。 每个key需要0到1个字节。

每个myisam表存储为两个文件,数据文件以.MYD结尾,还有一个索引文件以.MYI结尾。由此可见MyISAM与Innodb的索引并不一样,myisam的主索引和辅助索引结构上一样,它们的叶子节点都存储着某条记录的位置,而并不存储数据。

2. MyISAM表存储格式
MyISAM支持三种不同的存储格式 ,固定格式、动态格式和压缩格式;当表不包含可变长度的列(VARCHAR, VARBINARY, BLOB, or TEXT)时,默认使用固定格式。

三 创建和使用索引注意事项

1. 创建索引的注意事项

  • 频繁作为查询条件的字段适合建立索引;
  • 查询中与其它表关联的字段,外键关系建立索引;
  • 单值和复合索引,优先选择复合索引;
  • 查询中排序的字段,排序字段若通过索引去访问将大大提高查询速度;
  • 查询中统计或者分组字段要建立索引;
  • where条件里用不到的字段不创建索引;
  • 对于单键索引,尽量针对当前查询过滤性好的索引;
  • 在选择组合索引的时候,当前查询中过滤性最好的字段在索引字段的顺序中,位置越靠前越好;
  • 在选择组合索引的时候,尽量选择可以能够包含当前查询中的where子句中更多字段的索引;
  • 尽可能通过分析统计信息和调整查询的写法来达到选择合适索引的目的;
  • 频繁更新的字段不要建立索引;

2. 使用索引要注意的事项

  • 对于字符串索引,一定要加引号;
  • 如果索引了多列,要遵循最佳左前缀原则;
  • 不要在索引上做任何操作,会导致索引失效,而转向全表扫描;
  • 存储引擎不能使用范围条件右边的列;
  • 不等于、or都会使索引失效;

面试题:MySQL的innodb和myisam相关推荐

  1. 一句话说清聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM

    聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM经常遇到有人向我咨询这个问题,其实呢,网上帖子很多,也说的都对,但是呢,看客可不一定是真的理解了.所以今天在这里用最简短的语言让你明白这些 ...

  2. mysql聚集索引 myisam_一句话说清聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM

    版权声明:本文为博主原创文章,未经博主允许不得转载.https://blog.csdn.net/21aspnet/article/details/89303988 聚集索引和非聚集索引以及MySQL的 ...

  3. MySQL 数据库 InnoDB 和 MyISAM 数据引擎的差别

    InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是 ...

  4. mysql的InnoDB和MyISAM对比

    InnoDB和MyISAM是在使用MySQL最常用的两个表类型. MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method ...

  5. MySQL(三):InnoDB和MyISAM

    文章目录 一.InnoDB 和 MyISAM的不同 一.InnoDB 和 MyISAM的不同 InnoDB 支持事务,MyISAM 不支持.对于InnoDB每一条SQL语言都默认封装成事务,自动提交, ...

  6. mysql索引innodb和myisam的区别

    引用 引用 区别 InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一 ...

  7. MySQL之innodb与myisam:锁 事务 外键 主键 存储结构 存储大小 索引 count 注重点

    行锁:innodb支持行锁 事务:innodb支持事务 外键:MyISAM不支持InnoDB支持 主键:myisam允许没有索引和主键的表存在:innodb如果没有设定主键或者非空唯一索引,会生成一个 ...

  8. MySQL的InnoDB和MyISAM比较

    InnoDB 1)虽然不支持用户创建聚族索引,但InnoDB会对主键建立聚簇索引.如果你不指定主键,InnoDB会用一个具有唯一且非空值的索引来代替.如果不存在这样的索引,InnoDB会定义一个隐藏的 ...

  9. MySQL存储引擎之Myisam和Innodb总结性梳理

    Mysql有两种常用的存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比   MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件.第一个 文件的名字以表的名 ...

最新文章

  1. CF912D Fishes 期望
  2. Using rqt_console and roslaunch
  3. hdu 2072 单词数
  4. 异常注意事项_finally有return语句
  5. 利用python爬虫(part8)--Xpath路径表达式
  6. [原创].如何解决Nios II SBTE中出现的undefined reference to `xxx'警告
  7. error和exception
  8. Github pull request 工作流总结
  9. 机器学习非监督学习—k-means及案例分析
  10. 互联网日报 | 华为前三季度营收6713亿元;新央企南水北调集团揭牌;易车私有化议案获股东大会通过...
  11. 【QT源码】系列01
  12. Windows毫秒精度定时器SetTimer
  13. Vue+element ui+springboot实现用户头像修改
  14. 数字信号处理常见知识点汇总
  15. 如何重装来客电商源码?
  16. 深入理解CatBoost
  17. 怎么批量下载哗哩哗哩B站主页视频
  18. JQuery选择器学习总结JQuery选择器
  19. 计算机小学数学辅助教学缺点及对策 论文,小学计算机辅助教学论文
  20. UCF HSPT 2021 A . Minimum Excluded String (mex)

热门文章

  1. 你真的了解iOS怎么取属性的吗?
  2. 微软免费软件项目DreamSpark更名为Microsoft Imagine
  3. .Net Micro Framework导航总贴(新手必看)
  4. Unix整理笔记——安全性——里程碑M13
  5. Silverlight与Flash在FF中的一些注意点
  6. JavaScript工具
  7. jQuery Mobile动态刷新页面样式
  8. mysql sleep详解_MySQL中sleep函数的特殊现象示例详解
  9. linux kvm查看线程状态,kvm线程-005-线程状态-THREAD_JUST_BORN
  10. soapui和cxf的却别_根据wsdl文件用soapUi快速构建webService服务(有图有真相)