mysql调优-02

 

SCHEMa与数据类型的优化:

一、通过三范式或者反三范式来进行优化。

  1、在阿里规约中,有这么一条规定不建议三张表join,这样在数据量大的情况下,查询速度会非常慢。但是也不是绝对不行。通俗的讲。用空间换时间。自己斟酌。

二、主键选择

  1、推荐使用代理主键

  2、不建议使用自然主键(例如身份证号)

三、字符集的选择:

  1、如果存中文选用什么字符集?可以安装man yum install man man-pages -y

  2、建议使用utf8mb4

四、存储引擎的选择:

  1、innodb        用上索引的就是行锁,没用上的表锁 不同的存储引擎数据的存储方式是不同的。。

  2、memory

  3、myIsam

    

 五、适当拆分

1、把不常用的列拿出来,这样可以减少io的次数。适当提高内存的命中率。

执行计划:

一、可以用explain来查看执行计划:

  1、此处复习了mysql中in的用法。可以in在一个子表中       

  

    type显示的是访问类型,访问类型表示我是以何种方式去访问我们的数据,最容易想的是全表扫描,直接暴力的遍历一张表去寻找需要的数据,效率非常低下,访问的类型有很多,效率    从最好到最坏依次是:

    system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

    一般情况下,得保证查询至少达到range级别,最好能达到ref

    **possible_keys**

​     显示可能应用在这张表中的索引,一个或多个,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用

    **key**

​     实际使用的索引,如果为null,则没有使用索引,查询中若使用了覆盖索引,则该索引和查询的select字段重叠。

    **key_len**

     表示索引中使用的字节数,可以通过key_len计算查询中使用的索引长度,在不损失精度的情况下长度越短越好。

    **ref**

    显示索引的哪一列被使用了,如果可能的话,是一个常数。

    **rows**

    根据表的统计信息及索引使用情况,大致估算出找出所需记录需要读取的行数,此参数很重要,直接反应的sql找了多少数据,在完成目的的情况下越少越好

    **extra**

    包含额外的信息。

通过索引进行优化

  1、

posted @ 2022-04-04 20:47  Jerry&Ming  阅读(18)  评论(0)    收藏  举报