引言

  今天Qi号与大家分享什么是索引。其实索引:索引就相当于书的目录

  索引介绍

  用官方的话说就是

  索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。索引是针对表而建立的,它是由数据页面以外的索引页面组成的,每个索引页面中的行都会含有逻辑指针,以便加速检索物理数据。

  一大堆废话,其实索引就是:索引就相当于对指定的列进行排序,排序有利于对该列的查询,可以大大增加查询效率,并且索引实际是存储文件中的并且建立索引也是要消耗系统资源,所以索引会降低写操作的效率。

索引存储路径

不论是WAMP还是XAMPP路径 一般为
MySQL/data/数据库用户名

MySQL存储引擎

什么是存储引擎

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。

MySQL常用的存储引擎一般为InnoDB与MyISAM
各位小白在面试的过程中,面试官经常会问到InnoDB与MyISAM的区别,有些小白一遇到不会的问题就脑门发热,脚开始抖,并且回答的问题也是驴头不对马嘴,很笼统。

这就跟女友跟男票说肚子疼一样,男票如果只会说多喝点热水,早点休息之类的话估计女友想杀了男票的心都有了,回答不到点上,多喝点热水真的是一句万能的话,下面Qi号可以一起与大家解析这个问题。

InnoDB: 支持事务、外键 安全 myisam不支持
InnoDB为聚簇索引:表的数据与索引在同一个文件

MyISAM:效率高 速度快 稳定性高 易于管理 相对不安全
MyISAM为非聚簇:表的数据与索引处于不同的文件

InnoDB有两个文件
.FRM 表结构
.IDB 表数据+表索引

MyISAM有三个文件
.FRM 表结构
.MYD 表数据
.MYI 表索引

1. 效率高
MyISAM的索引和数据是分开的,并且索引是压缩的,提高了内存
使用率,能加载更多索引。
而InnoDB是索引和数据是紧密捆绑的,没有使用压缩从而会造成
InnoDB比MyISAM体积庞大不小。
2. 速度快
平台上承载的大部分项目是读多写少的项目,而MyISAM的读性能
是比InnoDB强不少的。
3. 易于管理
如果备份数据表的话,MyISAM很方便,只要发给他们对应那表的frm.MYD,MYI的文件,让他们自己在对应版本的数据库启动就行,而Innodb就需要导出xxx.sql了,因为光给别人文件,受字典数据文件的影响,对方是无法使用的。
 4. 如果和MyISAM比insert写操作的话,Innodb还达不到MyISAM的写性能,如果是针对基于索引的update操作,虽然MyISAM可能会逊色Innodb,但是那么高并发的写,从库能否追的上也是一个问题,还不如通过多实例分库分表架构来解决。
 5. 如果是用MyISAM的话,merge引擎可以大大加快应用部门的开发速度,他们只要对这个merge表做一些select count(*)操作,非常适合大项目总量约几亿的rows某一类型(如日志,调查统计)的业务表。
 6. 当然Innodb也不是绝对不用,用事务的项目就用Innodb的。另外,可能有人会说你MyISAM无法抗太多写操作,但是可以通过架构来弥补。

初级程序员在表述时可以针对效率高,速度快,易于管理这三点就差不多,然后可以说索引的工作原理,回行数据,这样的话给面试官的感觉起码还是有点墨水的。

索引类型

1. MyISAM 索引

  B-TREE(二叉树) 常用

  B-tree(多路搜索树)是一种常见的数据结构。使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。按照翻译,B 通常认为是Balance的简称。这个数据结构一般用于数据库的索引,综合效率较高。

  在MyISAM中索引文件.MYI存储的其实是数据的地址,真实的坐标,数据库快速的找到这个坐标并去定位.MYD中的数据,这个过程专业名词叫做回行,
  重复一遍
  数据库在索引中找到存放指定数据的位置,在磁盘中通过内存定位这个数据找到这个数据。

  hash(哈希)

  哈希插入的数据坐标是有序的,而存放的数据地址是无序的

2. InnoDB索引
  B-TREE(二叉树) 常用

  在InnoDB中索引文件.IDB文件存储的其实是数据的地址与数据,数据库快速的找到这个坐标的同时也找到了所要的数据,不需要回行去查找其他文件中的数据

这里Qi号在这里给大家强调一下,并不是MyISAM查询速度一定就比InnoDB快,有一句话说的话,万物皆无定性,扯的有点远了哈,其实呢就是针对不同的数据库环境,不同的存储引擎的执行效率也是不一样的,只不过综合性来讲MyISAM的查询速度大于InnoDB;

这句话大家可以去思考一下,或者去网上搜集一些资料;

索引的类别

普通索引优化查询 排序 分组
创建索引
create index in_name on t1(name);
alter table t1 add index in_name(name);
查看索引
show index from t1;
删除索引
drop index in_name on t1;
alter table t1 drop index in_name;
唯一索引 特殊的普通索引 不能出现重复值
创建索引
create unique index un_name on t1(name);
alter table t1 add unique index un_name(name);
查看索引
show index from t1;
删除索引
drop index un_name on t1;
alter table t1 drop index un_name;
主键索引
删除自增类型约束
alter table t1 modify id int(4);
删除主键索引
alter table t1 drop primary key;

添加主键
alter table t1 add primary key(id);
添加约束
alter table t1 modify id int(4) auto_increment;

索引字段介绍

· Table

表的名称。

· Non_unique

如果索引不能包括重复词,则为0。如果可以,则为1。

· Key_name

索引的名称。

· Seq_in_index

索引中的列序列号,从1开始。

· Column_name

列名称。

· Collation

列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)。

· Cardinality

索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机 会就越大。

· Sub_part

如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。

· Packed

指示关键字如何被压缩。如果没有被压缩,则为NULL。

· Null

如果列含有NULL,则含有YES。如果没有,则该列含有NO。

· Index_type

用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。

好了,索引的总结就到这里,之后Qi号如果有新的感悟会继续更新文章,有的小伙伴们有不同的意见也可以评论,多多建议~~

最后Qi号与大家分享一道超牛掰的面试题:

题目:

数学上有一种数列叫斐波那契数列:0,1,1,2,3,5,8,13,21,34,55,89,144这些数列中,第一个数是0,第二个数是1,从第三个数起,每个数恰好是前两个数值和

要求写出一个函数方法,方法内输入一个值,最后输出的是小于这个值之前的所有数字;

今天Qi号分享的是职场上的一句话:

发现问题一定要及时解决问题,所有的理由在领导眼里都是借口。

MySQL索引介绍的更多相关文章

  1. mysql性能优化-慢查询分析、优化索引和配置 MySQL索引介绍

    MySQL索引介绍 聚集索引(Clustered Index)----叶子节点存放整行记录辅助索引(Secondary Index)----叶子节点存放row identifier-------Inn ...

  2. Mysql索引介绍及常见索引(主键索引、唯一索引、普通索引、全文索引、组合索引)的区别

    Mysql索引概念:说说Mysql索引,看到一个很少比如:索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不是越多越好,假如这本书1000页,有500也是目录,它当然效率低,目录是要 ...

  3. Mysql索引介绍及常见索引的区别

    关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车.对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型 ...

  4. MySQL索引介绍+索引的存储类型+索引的优点和缺点+索引的分类+删除索引

    什么是索引? 索引用于快速找出某个列中有一特定值的行,不使用索引,mysql必须从第1条记录开始读完整的表,直到找出相关的行.表越大,查询数据所花费的实际越多.如果表中查询的列有一个索引,mysql能 ...

  5. Mysql系列(六)—— MySQL索引介绍

    前言 索引种类 索引维护 如何使用索引 一.索引索引种类 MySQL中索引主要包含以下几种: 普通索引 唯一索引 主键索引 联合索引 全文索引 二.索引维护 在简述了索引的类型后,再来了解下如何维护索 ...

  6. MySQL索引介绍和实战

    索引是什么 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构. 可以得到索引的本质:索引是数据结构,索引的目的是提高查询效率,可以类比英语新华字典,根据目录定位词 ...

  7. mysql 索引介绍与运用

    索引 (1)什么是索引? 是一种提升查询速度的 特殊的存储结构. 它包含了对数据表里的记录的指针,类似于字典的目录. 当我们添加索引时会单独创建一张表来去存储和管理索引,索引比原数据大,会占用更多的资 ...

  8. Mysql索引(一篇就够le)

    我想很多人对mysql的认知可能就是CRUD(代表创建(Create).更新(Update).读取(Retrieve)和删除(Delete)操作),也不敢说自己会用和熟悉mysql,当然我就是其中一个 ...

  9. php面试专题---Mysql索引类型、介绍及优点

    php面试专题---Mysql索引类型.介绍及优点 一.总结 一句话总结: 精品视频讲解里面的资料来源也是通过各种资料,比如博客.书等,只不过是基于讲解者的知识体系有整理的过程 1.B-Tree索引三 ...

随机推荐

  1. bit_count

    bit_count函数的含义 用来计算二进制数中包含1的个数. select BIT_COUNT(10); 因为10转成二进制是1010,所以该结果就是2. bit_or函数的含义 就是对两个二进制数 ...

  2. SQL Server ->> 重命名数据库

    ALTER DATABASE [oldDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO ALTER DATABASE [oldDB] MODIFY NAME ...

  3. thinkphp5设置403 404等http状态页面

    在thinkphp5中如何抛出异常状态码(比如401,403,404等),因为这些能极大的给用户以良好的体验. 因为在上线阶段,任何的系统错误信息都不能让浏览用户给看到,比如404(Not Found ...

  4. C++中临时对象的产生与优化

    看到了几篇讲的不错的博客,这里收集起来 不明白的地方互相参考 https://blog.csdn.net/fangqingan_java/article/details/9320769 https:/ ...

  5. mvc做网站怎么在mvc中直接访问.html网页 [问题点数:20分]

    最近用.net mvc做一个网站 我想在mvc中直接访问一个 .html页面 怎么设置一下啊 现在直接访问是404不让访问的 放到view文件夹外面...

  6. Catalan数列

    引入 今天听学长讲了卡特兰数列后对其有了更深的认识,在此完善了一下之前的博客加以总结. 首先用一个经典的例子来描述一下Catalan数列,我们有一个1~n的数列和一个大小为n的栈,我们有如下两种操作: ...

  7. pinyin4j工具类

    <!-- 导入pinyin4j --> <dependency> <groupId>com.belerweb</groupId> <artifac ...

  8. 【luogu P3709 大爷的字符串题】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3709 离散化+区间众数..? #include <iostream> #include < ...

  9. 解决:Visual Studio 启动就报错退出

    Please open an administrative CMD window and navigate to C:\Program Files (x86)\Microsoft Visual Stu ...

  10. Spring8中lambda表达式的学习(Function接口、BiFunction接口、Consumer接口)

    代码重构,为了确保功能的等效性,梳理代码时,发现如下代码: public SingleRespTTO fundI(SingleReqTTO request) throws Exception { re ...