小贝_mysql优化学习
mysql优化
简要:
1、数据库设计优化
2、sql语句优化
3、表切割
4、读写分离技术
一、数据库设计优化
1、表设计要符合三范式。当然,有时也须要适当的逆范式
2、什么是三范式
一范式: 具有原子性。不可再切割
二范式: 在满足一范式的基础上,我们考虑是否满足二范式。
仅仅要表的记录满足唯一性,也是说,同一张表,不可能出现全然同样的记录,一般说,在表中设计一个主键就可以。
三范式: 在满足二范式的基础上,我们考虑是否满足三范式。
仅仅要表满足没冗余性。
二、SQL语句优化
1、sql优化的一般步骤
a、通过show status命令了解各种sql的运行效率
b、定位运行效率较低的sql语句
c、通过explain/desc分析低效率的sql语句的运行情况
d、确定问题并採取对应的优化措施
2、showstatus命令
该命令能够显示mysql数据库当前状态,主要关心的是’com’开头的指令
showstatus like ‘com%’ ó show session status like ‘com%’//显示当前控制台的情况
showglobal status like ‘com%’ //显示数据库从启动到如今的情况
3、showvariables命令
该命令能够查看mysql当前的变量设置,主要关心的是慢查询时间
4、怎样在mysql中找到慢查询的sql语句
(备注: mysql数据库支持把慢查询语句,记录到日志中给程序猿分析;默认情况下,mysql不启用慢查询日志)
步骤: a、启动mysql慢查询
a1、在启动mysql服务时。指定—slow-query-log
a2、在利用client登进mysql后,设置变量
b、查看慢查询时间
默觉得10秒
c、改动慢查询时间
设置为1秒
(这个仅仅能在当前环境生效,假设想每次都生效,就改动mysql的配置文件)
d、查看慢查询日志
e、依据慢查询的sql语句。进行优化。最便宜的做法就是加索引
f、加上索引后
5、索引的影响
a、添加磁盘空间
b、给增删改带来不便
、哪些列上适合加入索引
a、频繁地作为查询条件字段应该创建索引
b、唯一性太差的字段(即该字段的值变化不大)不适合单独创建索引。即使频繁作为查询条件
c、更新很频繁的字段不适合创建索引
d、不会出如今where子句中字段也不应该创建索引
、索引的使用
測试表:
Create Table: CREATE TABLE`t2` (
`id` int(11) NOT NULL DEFAULT '0',
`name` char(5) DEFAULT NULL,
`age` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULTCHARSET=utf8;
insert into t2(name,age) values('a',2),('aa',3),('b',4),('c',3);
查询要使用索引最重要的条件是查询条件中须要使用索引。
下列几种情况下有可能使用到索引:
a、对于创建的多列索引,仅仅要查询条件使用了最左边的列,索引一般就会被使用。
b、对于使用like的查询。查询假设是 ‘%aaa’不会使用到索引‘aaa%’ 会使用到索引。
下列的表将不使用索引:
a、假设条件中有or,即使当中有条件带索引也不会使用。
b、对于多列索引,不是使用的第一部分。则不会使用索引。
c、like查询是以%开头
d、假设列类型是字符串,那一定要在条件中将数据使用引號引用起来。
否则不使用索引。
e、假设mysql预计使用全表扫描要比使用索引快。则不使用索引。
、验证索引使用情况
showstatus like ‘Handler_read%’;
备注:
handler_read_key:这个值越高越好,越高表示使用索引查询到的次数。
handler_read_rnd_next:这个值越高,说明查询低效。
9、经常使用SQL优化
a、大批量插入数据:
对于MyIsam:
1、alter table table_name disable keys;
2、loading data;
3、alter table table_name enable keys;
对于Innodb:
1、将要导入的数据依照主键排序
2、set unique_checks=0,关闭 唯一性校验
3、set autocommit=0。关闭自己主动提交
(提示: myisam和innodb的差别是:
a、myisam不支持外接,innodb支持
b、myisam不支持事务,innodb支持)
b、优化group by
默认情况下,mysql对group by后面的列名进行排序。假设查询中包含group by但用户想要避免排序结果的消耗,能够使用order by null禁止排序
三、表切割
当一个表的数据非常大的时候,其他的优化方式已经都考虑进去。起到的作用不大时,就要考虑分表了。即把一张大表切割成多张小表。
分表方式:
a、垂直分表
此时,表中存在非常多列,这个时候能够通过主键,把表中列分成多张表。然后再依据主键进行关联.(拆分后,每张表的列都不同)
分表前: 个人信息表
id |
name |
age |
|
intro |
1 |
a |
11 |
xxxx |
|
2 |
b |
22 |
yyyy |
|
分表后: 个人信息表
id |
name |
age |
|
1 |
a |
11 |
|
2 |
b |
22 |
22@qq.com |
个人介绍表
id |
intro |
1 |
xxxx |
2 |
yyyy |
b、水平分表
能够通过取模的方式,进行分表。因此。须要推断分成几张小表,即模的值为多少。
另外。拆分后,每张表的列都是一致的。
分表前:
个人信息表
id |
name |
age |
|
intro |
1 |
a |
11 |
xxxx |
|
2 |
b |
22 |
yyyy |
|
确定取模的值为2,因此能够把这样的表分为两张小表
1、推断id的值,id/2=?
分表后:
个人信息表0
id |
name |
age |
|
intro |
1 |
a |
11 |
xxxx |
个人信息表1
id |
name |
age |
|
intro |
2 |
b |
22 |
yyyy |
四、读写分离
通常来说。一台mysqlserver承载着全部关于数据库的操作。可是在訪问量大的时候,mysqlserver非常easy出现瓶颈。
为了降低mysqlserver的压力,(mysql本身支持主从复制功能)
能够通过分离读写操作。
1、读写分离前示意图
2、读写分离
The quieter you become,the more you are able to hear!
小贝_mysql优化学习的更多相关文章
- 小贝_mysql sql语句优化过程
sql语句优化 一.SQL优化的一般步骤 (1).通过show status命令了解各种SQL的运行频率. (2).定位运行效率较低的SQL语句-(重点select) (3).通过explain分析低 ...
- 小贝_mysql建表以及列属性
mysql建表以及列属性 简要: 一.建表原则 二.具体的列属性说明 一.建表原则 建表: 事实上就是声明列的过程,数据终于是以文件的形式放在硬盘(内存) 列: 不同的列类型占的空间不一样. 选列的原 ...
- 小贝_mysql 触发器使用
触发器 简要 1.触发器基本概念 2.触发器语法及实战样例 3.before和after差别 一.触发器基本概念 1.一触即发 2.作用: 监视某种情况并触发某种操作 3.观察场景 一个电子商城: 商 ...
- 小贝_mysql select连接查询
select连接查询 简要: 一.union联合查询 二.左右内连接 一.union联合查询 作用: 把2次或多次查询结果合并起来 具体: (表1查询结果) union (表2查询结果) 运行: 先算 ...
- 小贝_mysql主从复制作用以及案例
mysql主从复制 简要: 一.mysql用户授权 二.mysql bin-log日志 三.mysql主从复制 一.mysql用户授权 1.命令 2.作用:进行权限控制 3.样例: (备注: 同意 ...
- 小贝_mysql数据库备份与恢复
mysql数据库备份与恢复 简要: 一.数据库备份 二.数据库恢复 一.数据库备份 1.备份简单说明 : 系统执行中,增量备份与总体备份 例: 每周日总体备份一次,周一到周 ...
- 小贝_mysql 存储过程
存储过程 简要: 1.什么是存储过程 2.使用存储过程 一.存储过程 概念类似于函数,就是把一段代码封装起来.当要行这段代码的时候,能够通过调用该存储过程来实现.在封装的语句体里面.能够用if/els ...
- 小贝_mysql三种子查询
mysql三种子查询 简要: 一.三种子查询 二.三种子查询理解模型 一.mysql 三种子查询 where子查询.from子查询.exists子查询 二.理解模型: 2.1.一个好的模型,便于我们去 ...
- 小贝_mysql select5种子句介绍
mysql select5种子句介绍 简要 一.五种字句 二.具体解释五种字句 一.五种字句 where.group by.having.order by.limit 二.具体解释五种字句 2.1.理 ...
随机推荐
- HTML5表单新增元素与属性
form属性 在html4中,表单的从属元素必须写在表单内部,而在HTML5中,可以把他们书写在任何地方,然后为该元素指定一个form属性,属性值为该表单的id,这样就可以声明该元素从属于指定表单了. ...
- 免费开源《OdooERP系统部署架构指南》试读:第一章 Odoo架构概述
文/开源智造联合创始人老杨 本文来自<OdooERP系统部署架构指南>的试读章节.书籍尚未出版,请勿转载.欢迎您反馈阅读意见. 从web浏览器到PostgreSQL,多层与其他层交互以处理 ...
- 杭电 5326 Work (并查集求子结点为k的结点数)
Description It’s an interesting experience to move from ICPC to work, end my college life and start ...
- Nginx与python web服务配置(Uwsgi& FastCGI)
Uwsgi start uswgi uwsgi --harakiri 360000 --body-read-warning=10000 --max-fd=65536 -b 1000000 --http ...
- python mock模块使用(一)
什么是mock unittest.mock是一个用于在Python中进行单元测试的库,Mock翻译过来就是模拟的意思,顾名思义这个库的主要功能是模拟一些东西. 它的主要功能是使用mock对象替代掉指定 ...
- 大数据学习——JAVA采集程序
1 需求 从外部购买数据,数据提供方会实时将数据推送到6台FTP服务器上,我方部署6台接口采集机来对接采集数据,并上传到HDFS中 提供商在FTP上生成数据的规则是以小时为单位建立文件夹(2016-0 ...
- jmeter-添加断言(检查点)-实例
方法/步骤 打开 jmeter的图形界面工具,然后打开之前保存的脚本(之前经验中用到的),demo-baidu.jmx 先点击运行,查看运行结果. 第一次请求返回302,然后跳转到第二次请 ...
- spring boot学习02【如何在spring boot项目中访问jsp】
1.配置application.properties文件 打开application.properties追加 spring.mvc.view.prefix=/WEB-ROOT/ spring.mvc ...
- bzoj 3207 花神的嘲讽计划Ⅰ 主席树+hash
花神的嘲讽计划Ⅰ Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3112 Solved: 1086[Submit][Status][Discuss] ...
- 制作U盘Puppy-Live启动盘
制作U盘Puppy-Live启动盘 准备工具和材料:Puppy的ISO镜像文件.UltraISO工具.100M以上的U盘 开始: 1.用Ultraiso打开下载的镜像文件,然后选择菜单栏里面的&quo ...