面试的问题之mysql篇 2018-07-30

    1. mysql的表类型,他们有什么好处?怎么选择?

        类型好像挺多的,但是我比较熟悉的就innodb 和myisam ,类型看下面,挺多的,但是我们来讲讲我常用的这两个把,因为我所知道的都用这两种类型。 其他我目前还没了解。尽快学习中。。。

      先来聊聊他们的优缺点,

    myisam类型 -- 优点:读取速度快,不占用大容量内存与资源。  缺点,不能够容错,不支持事务。

    innodb类型  -- 优点:支持事务和外来键,数据更新迅速。 读取速度稍微慢一点。


    OK,很重要,myisam类型,的优点就是读取快。例如做新闻公告啥的,这种写操作少(难以用到回滚),非常适合。但是我是金融公司出来的,我们经常用到跟金额相关的,那就得用innodb了,毕竟我们需要写操作,我们需要事务。没有事务会导致什么问题?


    例如我们两张表,一张账户表,一张明细表,那我们如果没用事务的话,一张表加入数据,一张没加,岂不是乱套了?所以这时候事务就能帮我们解决问题,出问题就滚回去。


    具体区别请 :https://www.cnblogs.com/kevingrace/p/5685355.html

    image.png

    image.png



    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 链接在此挺详细的。

    如果要更具体的,就买本书来好好专研得了。