面试的问题之mysql篇 2018-07-30
mysql的表类型,他们有什么好处?怎么选择?
类型好像挺多的,但是我比较熟悉的就innodb 和myisam ,类型看下面,挺多的,但是我们来讲讲我常用的这两个把,因为我所知道的都用这两种类型。 其他我目前还没了解。尽快学习中。。。
先来聊聊他们的优缺点,
myisam类型 -- 优点:读取速度快,不占用大容量内存与资源。 缺点,不能够容错,不支持事务。
innodb类型 -- 优点:支持事务和外来键,数据更新迅速。 读取速度稍微慢一点。
OK,很重要,myisam类型,的优点就是读取快。例如做新闻公告啥的,这种写操作少(难以用到回滚),非常适合。但是我是金融公司出来的,我们经常用到跟金额相关的,那就得用innodb了,毕竟我们需要写操作,我们需要事务。没有事务会导致什么问题?
例如我们两张表,一张账户表,一张明细表,那我们如果没用事务的话,一张表加入数据,一张没加,岂不是乱套了?所以这时候事务就能帮我们解决问题,出问题就滚回去。
具体区别请 :https://www.cnblogs.com/kevingrace/p/5685355.html
2,如何优化mysql?
mysql优化很多,我们从php程序员的角度来谈优化把。运维角度的由运维大大搞,他们对这方面踩的坑比我们多。
网上说的设置最大连接数这块我是不太熟悉,因为这块也是我们运维大大搞的,我们从代码上来吧
看过一篇文章说 一个网站数据库压力百分之70来自写,百分之30来自读。按这个情况,我们可以做下主从。 主从的话我下次专门开一篇文章来讲主从。不过这可能属于运维范畴。
索引的设置,一般我们设置索引有普通索引(Normal),唯一索引(Unique),全文索引。其中全文索引我用的相对少。那我们来详细了解下普通索引和唯一索引的区别
我们例如一个order表,我们的订单号是唯一的,那么此时我们设置唯一索引效率会更高一点。而且有个给力的特点,如果插入的值表里已经有了,那么他是插入不了的。我们来做一些唯一属性的东西时建议用这个。
普通索引的话查询效率略差于唯一索引,但是有必要设置索引且不能设置唯一索引的时候,我们就用普通索引。
组合索引的用法,例如我们有两个字段, 一个是type 一个是status 状态 类型。 这两个经常组合在一起查询的话,那我们就给他们加入组合索引。 如果type更经常单独用到,那我们把type放到前面,这样type的话还是可以当普通索引来用。。。具体怎么讲,书读的少,不会说,如果还不理解建议多尝试。
下面几点网上扣来的,实在不愿意自己写了,文末放链接给大家。
① 为查询缓存优化查询
② EXPLAIN 我们的SELECT查询(可以查看执行的行数)
③ 当只要一行数据时使用LIMIT 1
④ 为搜索字段建立索引
⑤ 在Join表的时候使用相当类型的列,并将其索引
⑥ 千万不要 ORDER BY RAND ()
⑦ 避免SELECT *
⑧ 永远为每张表设置一个ID
⑨ 可以使用ENUM 而不要VARCHAR
⑩ 尽可能的使用NOT NULL
⑪ 固定长度的表会更快
⑫ 垂直分割
⑬ 拆分打的DELETE或INSERT语句
⑭ 越小的列会越快
⑮ 选择正确的存储引擎
⑯ 小心 "永久链接"
以上几点,细节部分如果不熟悉的应该还得再行百度。例如explan 具体查看哪些参数。 索引我们上面讲过了。 OK。
https://blog.csdn.net/u013087513/article/details/77899412 链接在此挺详细的。
如果要更具体的,就买本书来好好专研得了。