mySQL优化(水平分割取模算法)

MySQL如何调优
1数据库设计三范式
2数据库分表分库——水平分割,垂直分割
3.定位慢查询
4.存储过程
不用where 分组用having
mysQL(免费,开源RDS)
MySQL如何实现优化
1数据库设计要合理(3F)
2.添加索引(普通索引,主键索引,唯一索引,全文索引)
3分表分库技术(取模分表,水平分割,垂直分割)
4.读写分离(读一个写一个减少IO量)
5存储过程
6配置MYSQL最大连接数(my.ini文件)
7.MySQL服务器升级
8.随时清理碎片化
9.SQL语句调优
数据库设计
1.减少冗余量
2.3F(三范式)
第一范式:1F 原子性 (每列不能再分)1NF是对属性的原子性约束,要求属性(列)具有原子性,不可再分解;(只要是关系型数据库都满足1NF)
id name sex address(地址是否能分看公司需求)
第二范式:2F 保证唯一 性 主键
2 分布式系统解决并发生成订单号
保证抢票中,订单号不会重复生成(怎么保证订单的幂等性(幂等=保证不会重复生成))
解决办法(提前把订单号生成好放在Redis中)
第三范式:3NF是对字段冗余性的约束,它要求字段没有冗余。 没有冗余的数据库设计可以做到。
但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是: 在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余。
ID name sex
下面做了一个简单的例子展示一下水平分割的取模算法
maven添加的依赖如下

  
        org.springframework.boot
        spring-boot-starter-parent
        2.2.1.RELEASE
         
    
    mYSQLDesion
    ssss
    0.0.1-SNAPSHOT
    ssss
    mySQL QuMO shuanfa

    
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        




        
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
            mysql
            mysql-connector-java
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

因为用的idea编辑器,选择web其实只用添加下面的maven

   
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
            mysql
            mysql-connector-java
        

数据库设计四个表
一个user1 user2 user3 ,一个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;

application.properties代码如下

spring.datasource.url=jdbc:mysql://localhost:3306/testmysql?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

service层

package mysqldesion.ssss.test;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    //1取模算法的存放
    public String regist(String name, String pwd) {
        String insertUUIDSQl = "insert into uuid values (null)";
        jdbcTemplate.update(insertUUIDSQl);
        //查询到最近添加的id
        Long userID = jdbcTemplate.queryForObject("select last_insert_id()", long.class);
        //存放在具体表里面
        String tableName = "user" + userID % 3;
//        String insetsql = "insert into " + tableName + "values(" + userID + "," + name + "," + pwd + ")";
        String inserUserSQL = "insert into " + tableName + " values(" + userID + "," + name + ",'" + pwd + "')";
        System.out.println(inserUserSQL);
        jdbcTemplate.update(inserUserSQL);
        return "success";
    }

    //取模算法的查看
    public String get(Long userid) {
        String tableName = "user" + userid % 3;
//         String SelectUSerSQL="select * from "+tableName+" where id="+userid+"";
        String selectUserSQL = "select name from " + tableName + " where id =" + userid;
       System.out.println(selectUserSQL);
       String name= jdbcTemplate.queryForObject(selectUserSQL,String.class);
        return name;
    }


}

controller层

package mysqldesion.ssss.test;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/regist")
    public  String regist(String name ,String pwd){

        return  userService.regist(name,pwd);
    }

    @RequestMapping("/get")
    public String get(Long ueserid) {
        return    userService.get(ueserid);
    }
}

你可能感兴趣的:(mySQL优化(水平分割取模算法))