面试题:MySQL的innodb和myisam

一 Innodb

1. 简介
索引是一种排好序的用于快速查找的数据结构。
Innodb
这里写图片描述
**根据官网手册InnoDB支持B-tree索引、聚簇索引(Clustered indexes)、全文索引(Full-text search indexes)、不支持hash索引(InnoDB在内部利用哈希索引来实现其自适应哈希索引功能)、不支持T-tree索引。**Geospatial indexing support(坐标索引支持),支持索引缓存;
支持外键、支持事务。锁粒度是行锁。
2.聚簇索引
与myisam不同的是,Innodb叶子节点保存的是所有的数据
注:与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都会使索引失效;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549112.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用Markup Validation Service进行网页的W3C标准语法验证(c#)

W3C提供免费的Markup Validation Service,这是一个可以验证Html/XHtml文档的语法规范的公共服务。在某种程度上,有了它,我们再也不用为不能全面及时检测众多浏览器和五花八门的js/css不兼容性而痛不欲生了。^-^。 使用方法很简单,…

为什么MySQL索引更适合B+树而不是二叉树、B树

一 数据库为什么使用B树 1. 与二叉树相比 二叉树相比于顺序查找的确减少了查找次数,但是在最坏情况下,二叉树有可能退化为顺序查找。而且就二叉树本身来说,当数据库的数据量特别大时,其层数也将特别大。二叉树的高度一般是log_2…

SIP 電話

下載转载于:https://www.cnblogs.com/kevinsun/archive/2010/10/18/1854021.html

【数据安全案例】交警计算机系统再遭***,交通违法记录随意删除

根据新浪报道,据新华社10月14日电 利用当网管的机会,破解密码,非法进入交警计算机系统为他人删除车辆交通违法记录牟利。辽宁省鞍山市铁西区检察院透露,当地某公司员工程尚军因涉嫌破坏计算机信息系统罪,已于10月初被依…

将Java应用程序本地编译为EXE的几种方法

将Java应用程序本地编译为EXE的几种方法(推荐使用JOVE和JET)  1. 从[url]www.towerj.com[/url]获得一个TowerJ编译器,该编译器可以将你的CLASS文件  编译成EXE文件。  2. 利用微软的SDK-Java 4.0所提供的jexegen.exe创建EXE文件,这个软件可以  从微软…

MDOP套装之app-v安装使用及功能说明

最近尝试了瑞友天翼的虚拟化产品,感觉还不错,正好手上又下载了个mdop套装,顺手做了个app-v实验,其他实验教程后期继续推出。 一、服务端的安装 二、排序工具的安装 三、客户端的安装 四、使用排序工具虚拟化一个程序 五、发布虚…

奇虎360大战腾讯QQ 高潮迭起用户受伤

原文地址:奇虎360大战腾讯QQ 高潮迭起用户受伤 虽然我也是不可避免的QQ用户,但是自从360开始揭露腾讯QQ涉及扫描用户隐私引发的这场高潮迭起的比拼谁更淫荡谁更无耻的战争中,我心中的一碗水一直端的很平,就像对待小泽和空姐的作品…

容器技术之Dockerk8s知识笔记

本文带你快速了解Kubernetes与Docker 让你对容器与虚拟机的区别、Docker与k8s有一个快速的了解 目录 演变史容器与虚拟机的区别K8S与Docker概念DockerK8S演变史 传统部署时代: 早期,将单一的应用服务运行在物理服务器上,无法给服务器的应用…

容器技术之kubectl常用命令

kubectl用于运行Kubernetes集群命令的管理工具。本文概述涵盖了kubectl语法,对命令操作的描述,并列举了常用命令。 Kubectl命令详细列表请查看:Kubernetes kubectl 命令表 语法 $ kubectl [command] [TYPE] [NAME] [flags] command&#x…

Container.ItemIndex 获取reapeater行号

<div class"<%# (Container.ItemIndex)4?"class3":"class4"%>"></div>取到第五行的行号&#xff0c;用一个三元运算符来判断div的样式。 图中container.itemindex(container.ItemIndex-5)是不对的&#xff0c;最上面的代码才…

容器技术之快速了解K8S各抽象资源及组件架构

带你快速了解Kubernetes主要概念和组件架构。 Kubernetes的组件和架构比较多&#xff0c;功能也比较多。 如果详细探讨&#xff0c;每个Kubernetes组件都可以单独写篇博客详细讲解。 我们这里是快速了解&#xff0c;就写的相对比较简单一些。 主要是针对不熟悉Kubernetes的…

《活法》中一个故事--令托尔斯泰也折服的人性寓言

某个深秋的日子里&#xff0c;在枯树残枝任萧瑟秋风吹袭的景色中&#xff0c;有位旅人正在赶路回家&#xff0c;突然间&#xff0c;他发现脚边有一堆白白的东西&#xff0c;定睛一看&#xff0c;竟然是人骨。这种地方怎么会有人骨头?他觉得浑身不对劲却又想不透&#xff0c;可…

Python可视化神器之pyecharts

目录 概述安装参数实例 柱状图-Bar饼图-Pie折线图-Line散点图-scatter3D 柱状图-Bar3D仪表盘-Gauge雷达图-Radar词云图-WordCloud地理坐标系-Geo地图-Map概述 Pyecharts是一款将python与echarts结合的强大的数据可视化工具。使用 pyecharts 可以生成独立的网页&#xff0c;也…

我就不文明了

不是 我就的 我咋就这么笨呢 妈了个逼的 本来就没有基础 本来就英文不好 本来就找不到入门的方向 怎们所有人 都在打击我 怎么所有人 都说我不可能成功 我他吗的就不信了 我就学 我就盲目的寻找 我就不信 我实现不了自己的梦转载于:https://blog.51cto.com/100000372/422302

计算机基础之IP地址、子网掩码、网络号、主机号、主机数、网络地址、广播地址

相关概念&#xff1a;IP地址、子网掩码、网络号、主机号、主机数、网络地址、广播地址 IP地址&#xff1a;由4字节/32位表示&#xff0c;通常用点分十进制表示法&#xff0c;例如192.168.1.1&#xff0c;对应的二进制就是11000000 10101000 00000001 00000001 IP地址通常有下…

Qt 4.7.1 和 Mobility 1.1.0 已发布

Qt 的升级版本 Qt 4.7.1 以及 Qt Mobility 1.1.0 最终版本已于今日发布。现二者均可下载。 Qt 4.7.1 Qt 4.7.1是一个修补版本&#xff0c;解决了在 Qt 4.7.0 中出现的一些小问题&#xff0c;同时引入了 OpenGL 对 Symbian 的支持。 要下载此版本&#xff0c;请访问 http://get.…

寄存器(内存访问)07 - 零基础入门学习汇编语言19

第三章&#xff1a;寄存器&#xff08;内存访问&#xff09;07 让编程改变世界 Change the world by program 栈段 前面讲过&#xff0c;对于8086PC机&#xff0c;在编程时&#xff0c;我们可以根据需要 &#xff0c;将一组内存单元定义为一个段。 我们可以将长度为 N&…

大型网站架构设计系列总结

大型网站架构设计系列-我的总结如下&#xff1a; 1、 数据结构和产品架构设计&#xff0c;这是基础&#xff01; 2、 角色分开&#xff0c;各司其职&#xff08;web服务器&#xff0c;缓存服务器&#xff0c;负载平衡&#xff0c;数据库等&#xff09; 3、 HTML静态化&#xff…

Linux里Web应用上的截图软件——Shutter

Linux的发行版里——Ubuntu与Fedora自带的截图软件都是“gnome-screenshot”&#xff0c;这款软件小巧实用&#xff0c;不过就是截出来的图都是PNG图片&#xff0c;质量过高&#xff0c;而我截图发布在网上对图片的质量要求并不高&#xff0c;反而希望质量一般就行&#xff0c;…

腾讯的强大不是偶然,小马哥很强大

为什么80%的码农都做不了架构师&#xff1f;>>> 其实自己对于腾讯没什么好感&#xff0c;不过也没有太多的坏感&#xff0c;之前还有一篇日志&#xff0c;小批评了一下腾讯&#xff0c;今天看到小马哥写给内部员工的反思邮件。记录下两点提醒自己&#xff1a;对待敌…