健身&运动 头条技术文PHP开发

PHP面试题分享与答案(1)

2016-07-14  本文已影响690人  mamba架构算法

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

埋下一座城 关了所有灯

上一篇下一篇

猜你喜欢

热点阅读