携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第21天,点击查看活动详情
1.存储引擎方面
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.分区分表
-
分表:将一个大表按照一定的规则分解成多张具有独立存储空间的实体表
-
分区:按照规则分解表。分区是将数据分段划分在多个位置存放