mysql设置001_Mysql优化001

数据库三范式

数据库分表分库

怎样定位慢查询

索引优化

sql语句的调优

数据库读写分析

配置mysql最大连接数 my.ini

mysql服务器升级

随时清理mysql碎片

基础:分组 having 存储过程,触发器,函数

三范式

数据库设计(减少冗余量、3F)

1F 原子约束 列不可再分

2F  要求数据库表中的每个实例或行必须可以被惟一地区分 及完全依赖于主键

3F 消除传递依赖(消除冗余数据)

分表分库

分库场景:服务拆分。每个服务对应不同的数据库,互不干扰。

分表场景:水平分割分表:业务场景 存放日志 根据年份分表

水平分割取模算法:总数据与表的数量取模

分表缺点:分页查询,查询受限制(可建视图)注意:主表存放所有数据,根据具体业务进行分表查询

创建三张表 user0 / user1 /user2 , 然后我再创建 uuid表,该表的作用就是提供自增的id。

create table user0(

id int unsigned primary key ,

name varchar(32) not null default '',

pwd varchar(32) not null default '')

engine=myisam charset utf8;

create table user1(

id int unsigned primary key ,

name varchar(32) not null default '',

pwd varchar(32) not null default '')

engine=myisam charset utf8;

create table user2(

id int unsigned primary key ,

name varchar(32) not null default '',

pwd varchar(32) not null default '')

engine=myisam charset utf8;

create table uuid(

id int unsigned primary key auto_increment)engine=myisam charset utf8;

用户注册与查询Service

@Service

public class UserService {

@Autowired

private JdbcTemplate jdbcTemplate;

public String register(String name, String password) {

String uuidSql = "insert into uuid values (null)";

jdbcTemplate.update(uuidSql);

Long id = jdbcTemplate.queryForObject("SELECT LAST_INSERT_ID()", Long.class);

//取模算法

String tableName = "user" + id % 3;

String insertSql = "INSERT INTO " + tableName + " VALUES ('" + id + "','" + name + "','" + password

+ "');";

System.out.println("insertUserSql:" + insertSql);

jdbcTemplate.update(insertSql);

return "success";

}

public String get(Long id) {

String tableName = "user" + id % 3;

String sql = "select name from " + tableName + " where id="+id;

System.out.println("SQL:" + sql);

String name = jdbcTemplate.queryForObject(sql, String.class);

return name;

}

}

[引用]

1. 水平分割:主表 + N个辅助表(辅助表由主表水平分割而成:按量分割,达到量(N万条)加辅助表)

2. 主表记录所有数据, 用于普通增删改和 普通 非模糊查询,加索引;

3. 辅助表 用于 模糊查询 (思路:查询所有分表,limit 前x条 , 然后汇总到新的 数组,重新排序分页)

4. 主表和N个辅助表 之间  可用 触发器 来同步数据

如何定位到慢查询

mysql默认慢查询为10秒(一般超过1s就考虑慢查询)

使用show status使用show status查看MySQL服务器状态信息

常用命令

--mysql数据库启动了多少时间

show status like 'uptime';

show  stauts like 'com_select'  show stauts like 'com_insert' ...类推update  delete(显示数据库的查询,更新,添加,删除的次数)

show [session|global] status like .... 如果你不写[session|global]默认是session会话,指取出当前窗口的执行,如果你想看所有(从mysql启动到现在,则应该global)

//显示到mysql数据库的连接数

show status like  'connections ';

//显示慢查询次数

show status like 'slow_queries';

查询慢查询时间

show variables like 'long_query_time';

修改慢查询时间

set long_query_time=1; ---但是重启mysql之后,long_query_time依然是my.ini中的值

Mysql安全模式启动+查看mysql日志可定位慢查询语句

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值