由于之前的每一个问题都是一个比较大的知识点,作者希望可以尽量一一详细解答,如果有不足的地方欢迎大家补充和修改,同时借鉴牛人写的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. win10 sshsecureshellclient删除profile保存的信息

    C:\Users\joe\AppData\Roaming\SSH

  2. (转)[Shell]tr命令详解

    原文:http://blog.csdn.net/sunnyyoona/article/details/52986893 1. 用途 tr,translate的简写,主要用于压缩重复字符,删除文件中的控 ...

  3. java连接redis使用jedis带密码

    一.引入jedis的Maven配置文件 <!-- redis连接客户端jedis --> <dependency> <groupId>redis.clients&l ...

  4. k8s单节点集群部署应用

    之所以用k8s来部署应用,就是因为k8s可以灵活的控制集群规模,进行扩充或者收缩.生产上我们要配置的参数较多,命令行的方式显然不能满足需求,我们应该使用基于配置文件的方式.接下来做一个部署的demo: ...

  5. js 添加HTML属性的方法

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. Java 获取当前时间距离当天凌晨的秒数

    原文出自:https://blog.csdn.net/seesun2012 在前期项目中遇到一个客户端与服务器间的时间同步问题,需要获取到当前时间与当天凌晨时间距离的秒数,写这篇文章主要是为了总结一下 ...

  7. 文章点赞功能(Ajax)

    一.文章点赞样式构建 1.将base.html的css样式改为外部引入 将base.html的内嵌样式删除,改为使用 HTML 头部的 <head> 标签对中使用<link>标 ...

  8. 自适应布局下echarts引起页面跳帧

    项目上突然遇到一个问题,鼠标快速滑动有echarts画的饼图时,页面出现了跳帧.布局的高度突然发生变化然后恢复正常.高度怎么会变化呢?都是按百分比来的啊? 经过一番仔细观察,在跳帧的时候页面底部闪过了 ...

  9. 创建简单的node服务器

    昨天咱们说了封装ajax,今天咱们说一下 自己创建一个建议的node服务器: 话不多说直接上代码: var http = require('http') //对URL 解析为对象//1.导入模块 UR ...

  10. Elipse plugin or Bundle & OSGI

    Develop and register service, lookup and use service! Android Design on service's publish-find-bind ...