mysql优化
1.存储引擎
在创建表的时候我们使用sql语句,Create table tableName () engine=myisam|innodb;
innodb存储引擎,开启独立表空间my.cnf配置文件,行级锁定处理高并发
myisam表级锁定,支持并发插入
Innodb :数据完整性,并发性处理,擅长更新,删除。
myisam:高速查询及插入。擅长插入和查询。
2.字段类型选择
尽量选择整数类型,尽量使用占用空间小(TINYINT用在年龄),固定长度。char代替vchar
尽量把字段设置为NOT NULL,查询的时候,数据库不用去比较NULL值
3.减少数据库操作,需要查询count的时候,可以增加一个字段存储
4.索引
查询数据尽量用索引指定。
5.分区分表
在创建表时,指定分区的选项:
Create table table_name (定义)
Partition by 分区算法 (参数) 分区选项。
例如:Partition by key (id) partitions 5;
分区算法
MySQL提供4种分区算法:取余:Key,hash 条件:List,range 。
KEY 取余 ,按照某个字段进行取余
partition by key(id) partition 5;
Hash 取余,按照某个表达式的值进行取余
partition by hash (month(birthday)) partition 12;
List 条件 ,列表,需要指定的每个分区数据的存储条件。
partition by list (month(birthday)) (
partition chun values in(3,4,5),
partition xia values in(6,7,8),
partition qiu values in(9,10),
partition dong values in(11,12,1,2)
);
Range 条件,范围, 条件依赖的数据是一个条件表达式。
partition by range (year(birthday)) (
partition q_01 less than (1981),
partition q_02 less than (1990),
partition q_03 less than (2000),
partition q_04 less than maxvalue
);
分表
水平分表,创建结构相同的N个表
垂直分表,字段单独存储一张表
比如商品表根据不同商品种类分成不同的表。
6.服务器架构,主从服务器复制,读写分离,负载均衡
一主多从服务器,主服务器负责写数据。从服务器负责读数据。复制功能mysql会自带。
服务器安装mysql proxy
7.sql语句优化:
尽量不用子查询,多表联合操作,而是将复杂的SQL拆分多次执行。
用join代替子查询,不需要在内存中创建临时表
使用UNION连接字段代替建立临时表
使用事务来进行插入操作,用于并发的情况不出错。
尽量不用like,select *,直接指定字段名。
使用外键使关联数据同步操作
8.查询缓存query_cache,开启查询缓存,第二次查询使用缓存,通过语句设置。