一、数据库优化
建表:
create table user(
id int not null,
name varchar(200),
ip int )engine=innodb default charset=utf8;
1. 选择合适的字段类型,比如用户状态选择tinyint,因为tinyint占用一个字节
2. 尽量每个字段都添加NOT NULL
3. 能够用数字类型尽量使用数字类型,比如IP地址可以使用int类型保存
4. 选择合适的表引擎,比如:如果这个表写操作比较频繁,建议使用innodb
5. 选择合适的字符集。一般都是选择utf8
6. 根据业务情况,给经常作为where/order by /group by后面的字段添加索引
7. 把不常用的字段和字段类型比较大(text) 划分到其他表中
8. 适当地冗余,反范式。以达到空间换取时间
一般数据库配置文件的参数也是需要根据业务情况改动。
二、架构层面的优化:
1. 分库分表
2. 搭建主从数据库,做到读写分离。减少单台数据库服务器压力
三、查询的优化:
select id,name from user where md5(name) = '' limit 10 //先把一个sql语句写出来,然后分析
1. 不要使用*,尽量只查需要的字段
2. 尽量使用LIMIT,减少数据传输大小
3. 尽量根据索引来检索数据
4. 尽量不使用子查询,可以使用连接替换,连接字段需要添加索引
5. 尽量减少在数据库进行运算、使用内置函数
6. 尽量减少使用like模糊查询
建表:
create table user(
id int not null,
name varchar(200),
ip int )engine=innodb default charset=utf8;
1. 选择合适的字段类型,比如用户状态选择tinyint,因为tinyint占用一个字节
2. 尽量每个字段都添加NOT NULL
3. 能够用数字类型尽量使用数字类型,比如IP地址可以使用int类型保存
4. 选择合适的表引擎,比如:如果这个表写操作比较频繁,建议使用innodb
5. 选择合适的字符集。一般都是选择utf8
6. 根据业务情况,给经常作为where/order by /group by后面的字段添加索引
7. 把不常用的字段和字段类型比较大(text) 划分到其他表中
8. 适当地冗余,反范式。以达到空间换取时间
一般数据库配置文件的参数也是需要根据业务情况改动。
二、架构层面的优化:
1. 分库分表
2. 搭建主从数据库,做到读写分离。减少单台数据库服务器压力
三、查询的优化:
select id,name from user where md5(name) = '' limit 10 //先把一个sql语句写出来,然后分析
1. 不要使用*,尽量只查需要的字段
2. 尽量使用LIMIT,减少数据传输大小
3. 尽量根据索引来检索数据
4. 尽量不使用子查询,可以使用连接替换,连接字段需要添加索引
5. 尽量减少在数据库进行运算、使用内置函数
6. 尽量减少使用like模糊查询