由于之前的每一个问题都是一个比较大的知识点,作者希望可以尽量一一详细解答,如果有不足的地方欢迎大家补充和修改,同时借鉴牛人写的Mysql中算法的实现以及内存原理,Btree结构等。

1:MySQL数据库存储引擎有MyISAM和innoDB,请问这两种类型的索引是如何存储的?

现在问问题已经不问MySQL有哪些存储引擎,也不问MyISAM与innoDB的区别了吗?直接开始问索引如何存储的吗?

这个还需要从MySQL为什么需要建立索引开始说起,索引能够提高数据检索的效率,降低数据库的IO成本和排序成本,在数据库中给字段添加索引,带来的最大好处就是该字段作为检索条件的时候能够大大提高我们检索的效率,加快检索时间,降低检索过程中需要扫描的数据量,但是我们不能一遇到query就给字段添加索引,索引并不是多多益善。

   索引是把你设置为索引的字段A存储在独立区间S中,里面只有这个字段的内容,在查找这个字段与字段A的时候,只需要在区间S中去查找,而不是去数据库中查找,找到符合条件的字段,在去数据库中寻找与A对应的字段的物理地址,再把对应的数据读取出来。如果不添加索引,你查找的就有可能是整个数据库这里面会有大量的多余的字段查找,不相干的字段,数据库在判断不相干字段的过程中浪费了时间和效率。不是索引越多越好,你的每一个索引都是建立在一个单独区间S中的,独立区间越大搜索就会越占用你的资源。

详情请查看: http://blog.sina.com.cn/s/blog_8efa3c4f0102wqgs.html

 

ps:MyIsAm与innoDB区别:

一、InnoDB支持事务,MyISAM不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了。

二、MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用

三、InnoDB支持外键,MyISAM不支持

四、MyISAM是默认引擎,InnoDB需要指定

五、InnoDB不支持FULLTEXT类型的索引

六、InnoDB中不保存表的行数,如select count(*) from table时,InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。

  注意的是,当count(*)语句包含where条件时MyISAM也需要扫描整个表

七、对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引

八、清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表

九、InnoDB支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like '%lee%'

2:索引分为哪些?如何创建索引?索引如何优化?A,B,C联合索引如何才能命中索引?

MySQL索引分为主键索引,唯一索引,普通索引,全文索引以及复合索引等

创建主键索引:alter table ·user· add primary key('A');

创建唯一索引:alter table `user` add unique('A');

创建普通索引:alter table `user` add index index_name('A');

创建全文索引:alter table `user` add fulltext('A');

创建联合索引:alter table `user` add index index_name('A','B','C');

注意索引使用具有居左原则,也就是最先使用的索引必须排除掉最多选项,对于ABC联合索引,在使用的过程中只要具有A并且A排在第一位,即Ab,AC,ABC这样的索引使用即可命中索引,A为联合索引的引导列。

ps:

主键不一定自增,但是自增的键一定是主键。

使用explain命令查看sql,可以查看索引以及sql效率

索引的东西还有很多,合理使用索引需要开发者视具体业务而定。

全文索引在MySQL中是属于fulltext索引,并且只能在char,varchar或text类型的列上创建。

在MySQL5版本以上,varcahr(20)中的20代表的是20个字符,可以存储20个汉字,字母,数字等,存储汉字与字符编码没有关系。

varcahr(20),char(20)在超过规定字符之后都将无法插入到数据库。

SQL语句命令需要熟记于心。

PHP面试题分享与答案的更多相关文章

  1. 挑战10个最难的Java面试题(附答案)【下】【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  2. 挑战10个最难的Java面试题(附答案)【上】【华为云技术分享】

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/devcloud/article/deta ...

  3. 40道Java基础常见面试题及详细答案

    最近看到网上流传着各种面试经验及面试题,往往都是一大堆技术题目贴上去,但是没有答案. 为此我业余时间整理了40道Java基础常见的面试题及详细答案,望各路大牛发现不对的地方不吝赐教,留言即可. 八种基 ...

  4. iOS面试题整理带答案

    iOS面试题整理带答案       找工作,面试是避免不了的! 而技术开发面试,问一些技术相关的问题是必须的,最新的技术可能人人都趋之若鹜,但有些原理和基础的也希望都有了解. 这里整理了一些iOS相关 ...

  5. J2EE面试题集锦(附答案)

    转自:http://blog.sina.com.cn/s/blog_4e8be0590100fbb8.html J2EE面试题集锦(附答案)一.基础问答 1.下面哪些类可以被继承? java.lang ...

  6. Android 面试题集 包含答案

    作者:guoxiaoxing 链接: https://github.com/guoxiaoxing/android-interview 本文基于作者采用的MIT协议分发. 手画一下Android系统架 ...

  7. java_面试_02_Java面试题库及答案解析

    二.参考资料 1.Java面试题库及答案解析

  8. C语言试题(标准答案)

    C语言试题(标准答案) 一.单选题(每小题2分,共20小题40分) 1.1-1.5    B D A C B                1.6-1.10    C A D B C 1.11-1.1 ...

  9. C语言编程规范试题(标准答案)

    C语言编程规范试题(标准答案) 一.单选题(每小题3分,共20小题60分) 1.1-1.5    B D A C B                1.6-1.10    C A D B C 1.11 ...

随机推荐

  1. DP Intro - Tree DP Examples

    因为上次比赛sb地把一道树形dp当费用流做了,受了点刺激,用一天时间稍微搞一下树形DP,今后再好好搞一下) 基于背包原理的树形DP poj 1947 Rebuilding Roads 题意:给你一棵树 ...

  2. 抓包来看ftp状态码

    1.quit退出 客户端输入退出命令: 退出的抓包数据交换过程: 2.用户登录,输入正确用户名和错误用户名都是返回331请求输入密码,这里不再将错误用户名的抓包数据交换过程截图. 数据交换过程: 服务 ...

  3. [转]ASP.NET Core基本原理(11)-管理应用程序状态

    本文转自:http://zhuchenglin.me/fundamentals-11-app-state?utm_source=tuicool&utm_medium=referral ASP. ...

  4. 02.ArrayList和HashTable

    ArrayList集合 数组的缺点: (1).数组只能存储相同类型的数据. (2).数组的长度要在定义时确定. 集合的好处: (1).集合可以存储多种不同类型的数据. (2).集合的长度是可以任意改变 ...

  5. 2.C#编程语言

    C#(sharp):是一种编程语言,可以开发基于.net平台的应用.   java即是一种平台,也是一名语言.   在.net平台当中,C#是主流语言.C#语言开发的应用不能脱离.net环境而独立运行 ...

  6. 优化代码CPU层面

    今天在看<支撑处理器的技术>,其中,讲到了CPU流水线.在指令之间,如果下一条指令,需要用到上一条指令的结果,会影响到流水线的执行.书上给出了几种解决方案,一个是在指令中间插入一下无关的指 ...

  7. mpvue自定义化后台富文本样式

    最近公司写小程序开始换框架了,之前用wepy,现在用mpvue. mpvue是基于vue的写法来开发微信小程序.虽然不完全和vue一样,但是大致和vue一样,所以基本开发上是上手很快的. 现在项目进程 ...

  8. Django的模型层

    一.ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...

  9. SQLAlchemy的使用---M2M多对多关系

    from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, Stri ...

  10. linux下使用ntfs-3g挂载NTFS出错

    挂载报错如下图: 根据图中的报错:The disk contains an unclean file system (0, 0). 在网上搜索了一下原因,由于之前Windows系统未被正常关闭产生了错 ...