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、
本文来自博客园,作者:Jerry&Ming,转载请注明原文链接:https://www.cnblogs.com/jerry-ming/articles/15899477.html

浙公网安备 33010602011771号