mysql优化

74 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第21天,点击查看活动详情

1.存储引擎方面

image.png

myISAM

InnoDB

Memory引擎     数据置于内存,快,Mysql重启会发生数据丢失

archive     只支持数据查询,写入,常用于日志

2.列类型优化

整型:在满足需求的情况下,尽量选择小类型

能用整型就不用字符串:枚举、集合代替字符串,保存ip地址时字符串转为整型

在使用字符串时,固定长度一定选择char,可变长度尽量减小长度

时间类型,参与运算比较多的采用int,不参与运算的用date、datetime等

    unix_timestamp() 将字符串时间转为时间戳

    from_unixtime() 将时间戳转为字符串时间

    now() 获取系统时间

尽量使用not null。允许空字段在执行sql时,会执行更复杂的运算。

3.索引

索引的优点

  • 创建唯一性索引,保证数据库表中每一行数据的唯一性

  • 大大加快数据的检索速度,这也是创建索引的最主要的原因

  • 减少磁盘IO(向字典一样可以直接定位)

索引的缺点

  • 创建索引和维护索引要消耗时间,这种时间随着数据量的增加而增加

  • 索引需要占用额外的物理空间

  • 当对表中的数据进行增加、删除和修改的时候,索引也要动态维护,降低了数据的维护速度

主键索引     主键必须加主键索引,推荐使用 int类型

唯一索引

普通索引

  • 前缀索引:说白了就是对文本的前几个字符建立索引, 这样建立起来的索引更小,所以查询更快

  • like左前缀原则:使用模糊查询时,建议不要增加前面的%

全文索引

  • 模糊查询和全文索引方式查询,能够得到相同结果,但是,全文索引方式sql的执行效率更高

复合索引

  • 最左前缀原则:最左优先,以最左边的为起点任何连续的索引都能匹配上

4.mysql内置缓存

内置缓存是数据库级别的,可以设置不缓存表

数据表内数据发生变化缓存失效

SQL语句中空格会影响SQL缓存。

5.分区分表

  • 分表:将一个大表按照一定的规则分解成多张具有独立存储空间的实体表

  • 分区:按照规则分解表。分区是将数据分段划分在多个位置存放