MySQL优化一 简绍

时间:2023-09-18 22:59:50
优化方面:

  存储层:数据表”存储引擎”选取、字段类型选取、逆范式(3范式)

  设计层:索引、分区/分表

  架构层:分布式部署(主从模式/共享)

  sql语句层:结果一样的情况下,要选择效率高、速度快、节省资源的sql语句执行

熟悉的存储引擎:

  Myisam:持的特性有压缩机制等,mysiam的并发性较比innodb要稍逊色,因为数据表是“表锁”

  Innodb:支持事务、支持行级锁、支持外键,速度比Myisam的要稍慢,并发性高,多人同时请求,速度快、效率高。

  memory:内部数据运行速度非常快,临时存储一些信息,服务器如果断电,就会清空该存储引擎的全部数据

存储引擎

  存储数据格式,不同存储引擎有自己特点

  mysiam

  文件:每个数据表都有三个文件(结构、索引、数据)

  写入存储数据顺序:存储的顺序与写入顺序一致

  并发性:锁机制为“表锁”, 并发性不高

  压缩处理:不频繁发生变化的数据适合做压缩

  innodb

  文件:结构有独立文件,数据与索引合并为一个文件

  写入存储数据顺序:根据主键id值的顺序进行数据存储

  并发性:并发性好,“行锁”

三范式

  字段的原子性,是唯一的,不能再分隔

  每一行都能被唯一的区分,强调一个表要有主键

  与数据库的冗余有关。一个表不能包含其他表的非关键字信息。也就是说你有其他表的主键作为自己的外键,不能再拿人家的其他字段

逆范式

  数据表的总体设计要遵守三范式,但是有的时候为了整体性能的考虑,就不遵守一点,这样就称为“逆范式”

索引

  主键索引(primary key)索引是进行数据库设计的时候,提升性能最有效的一个技术。

  使用索引好处:可以非常快速定位我们需要找到的信息。

  索引为什么速度快:从技术本身的角度看索引,索引就是一种数据结构(寝室大楼),数据结构内部有算法,可以帮组我们快速、准确定位需要的信息。

  执行计划explain:一条sql语句在没有执行之前,先把需要的资源都计划好

  使用到索引:耗费资源少,查询速度快

    没有使用到索引:耗费资源多,查询速度慢

  注意:有的字段重复内容很多(例如性别字段),则不要设置索引,不会起作用。

  索引原则:

    字段独立原则

    左原则

      模糊查询

    复合索引

      单独使用第一个字段作为条件,可以使用

      单独使用第二个字段作为条件,不能使用

      使用全部字段(不用考虑顺序)作为条件,可以使用

    OR原则

        左右都有索引,会合并索引一起使用

        一边有索引、一边没有索引,导致整体都没得索引使用