博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql优化问题汇总
阅读量:4541 次
发布时间:2019-06-08

本文共 2343 字,大约阅读时间需要 7 分钟。

 

sql优化--》分区--》分表--》垂直分库--》水平分库--》读写分离

分区 

关于分区的博客推荐这个:https://blog.csdn.net/youzhouliu/article/details/52757043

1查看是否支持分区?一般现在的mysql版本都支持。

进入到mysql命令行。mysql -u root -p show plugins    //查看是否支持分区,最后会出现一个 partition  这个行 表示支持    也可以    show variables like '%partition%';

 

2查看这个数据库所有的表的状态,是否是分区表

show table status

3查看表具有哪几个分区、分区的方法、分区中数据的记录数等信息

select   partition_name part,    partition_expression expr,    partition_description descr,    table_rows  from information_schema.partitions  where   table_schema = schema()    and table_name='test';  select schema()   //查看在那个数据库

p0 id 6 1

p1 id 11 0
p2 id 16 1
p3 id MAXVALUE 1

4显示扫描哪些分区,及他们是如何使用的

explain partitions select语句

 

 

 

5 如何分区

注意:必须创建表是的时候才能创建分区,不能在已有的数据上对表进行分区,如果想在已有的表中创建分区,解决办法是创建一个新的表并设置好分区,然后再进行数据转移。注意;号。

-----------------------------------创建range分区CREATE TABLE employees (    id INT NOT NULL,    fname VARCHAR(30),    lname VARCHAR(30),    hired DATE NOT NULL DEFAULT '1970-01-01',    separated DATE NOT NULL DEFAULT '9999-12-31',    job_code INT NOT NULL,    store_id INT NOT NULL)PARTITION BY RANGE (store_id) (    PARTITION p0 VALUES LESS THAN (6),    PARTITION p1 VALUES LESS THAN (11),    PARTITION p2 VALUES LESS THAN (16),    PARTITION p3 VALUES LESS THAN MAXVALUE);-----------------------------------创建list分区CREATE TABLE emp (  empno VARCHAR (20) NOT NULL,  empname VARCHAR (20),  deptno INT,  birthdate date NOT NULL,  salary INT) PARTITION BY list (deptno)(  PARTITION p1 VALUES IN (10),  PARTITION p2 VALUES IN (20),  PARTITION p3 VALUES IN (30));以部门作为分区依据,每个部门做一分区。-----------------------------------创建HASH分区CREATE TABLE emp2 (    empno VARCHAR (20),    empname VARCHAR (20),    deptno INT,    birthdate date ,    salary INT) PARTITION BY HASH (deptno) PARTITIONS 3;-----------------------------------创建key分区CREATE TABLE emp (  empno VARCHAR (20) NOT NULL,  empname VARCHAR (20),  deptno INT,  birthdate date NOT NULL,  salary INT) PARTITION BY KEY (birthdate) PARTITIONS 4;

 

 

 

垂直拆分

将系统中不存在关联关系或者需要join的表可以放在不同的数据库不同的服务器中。

按照业务垂直划分。比如:可以按照业务分为资金、会员、订单三个数据库。

需要解决的问题:跨数据库的事务、join查询等问题。

水平拆分

例如,大部分的站点。数据都是和用户有关,那么可以根据用户,将数据按照用户水平拆分。

按照规则划分,一般水平分库是在垂直分库之后的。比如每天处理的订单数量是海量的,可以按照一定的规则水平划分。需要解决的问题:数据路由、组装。

 

 

推荐几篇博客,讲的很不错:

https://www.cnblogs.com/jpfss/p/9176150.html#undefined

 

https://www.cnblogs.com/bluebluesky/articles/6413255.html

转载于:https://www.cnblogs.com/coder-lzh/p/9295224.html

你可能感兴趣的文章
浅谈JSP中forward和redirect
查看>>
yii2 restfulapi 的配置和访问
查看>>
POJ3278
查看>>
tomcat 设置jvm内存
查看>>
C#根据汉字生成拼音首字母全称
查看>>
数据结构 斐波那契查找
查看>>
ranorex前一步的操作结果后一步如何调用
查看>>
食物链 2001年NOI全国竞赛
查看>>
封锁阳光大学
查看>>
图论概况
查看>>
Camera图片特效处理综述(Bitmap的Pixels处理、Canvas/paint的drawBitmap处理、旋转图片、裁截图片、播放幻灯片浏览图片<线程固定时间显示一张>)...
查看>>
(79)zabbix key总是not supported的解决方法
查看>>
不重新编译安装php模块的方法
查看>>
Oracle dblink的说明和简单使用
查看>>
scp限速
查看>>
oracle number数据类型
查看>>
Laravel 完整开源项目大全
查看>>
[Spark内核] 第32课:Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等...
查看>>
基于jetty镜像的ossfs镜像docker镜像构建
查看>>
python用reduce和map把字符串转为数字的方法
查看>>