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 0p2 id 16 1p3 id MAXVALUE 14显示扫描哪些分区,及他们是如何使用的
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