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

email

intro

1

a

11

11@qq.com

xxxx

2

b

22

22@qq.com

yyyy

分表后: 个人信息表

id

name

age

email

1

a

11

11@qq.com

2

b

22

22@qq.com

个人介绍表

id

intro

1

xxxx

2

yyyy

b、水平分表

能够通过取模的方式,进行分表。因此。须要推断分成几张小表,即模的值为多少。

另外。拆分后,每张表的列都是一致的。

分表前:
个人信息表

id

name

age

email

intro

1

a

11

11@qq.com

xxxx

2

b

22

22@qq.com

yyyy

确定取模的值为2,因此能够把这样的表分为两张小表

1、推断id的值,id/2=?

分表后:
个人信息表0

id

name

age

email

intro

1

a

11

11@qq.com

xxxx

个人信息表1

id

name

age

email

intro

2

b

22

22@qq.com

yyyy

四、读写分离

通常来说。一台mysqlserver承载着全部关于数据库的操作。可是在訪问量大的时候,mysqlserver非常easy出现瓶颈。

为了降低mysqlserver的压力,(mysql本身支持主从复制功能)

能够通过分离读写操作。

1、读写分离前示意图

2、读写分离

The quieter you become,the more you are able to hear!

小贝_mysql优化学习的更多相关文章

  1. 小贝_mysql sql语句优化过程

    sql语句优化 一.SQL优化的一般步骤 (1).通过show status命令了解各种SQL的运行频率. (2).定位运行效率较低的SQL语句-(重点select) (3).通过explain分析低 ...

  2. 小贝_mysql建表以及列属性

    mysql建表以及列属性 简要: 一.建表原则 二.具体的列属性说明 一.建表原则 建表: 事实上就是声明列的过程,数据终于是以文件的形式放在硬盘(内存) 列: 不同的列类型占的空间不一样. 选列的原 ...

  3. 小贝_mysql 触发器使用

    触发器 简要 1.触发器基本概念 2.触发器语法及实战样例 3.before和after差别 一.触发器基本概念 1.一触即发 2.作用: 监视某种情况并触发某种操作 3.观察场景 一个电子商城: 商 ...

  4. 小贝_mysql select连接查询

    select连接查询 简要: 一.union联合查询 二.左右内连接 一.union联合查询 作用: 把2次或多次查询结果合并起来 具体: (表1查询结果) union (表2查询结果) 运行: 先算 ...

  5. 小贝_mysql主从复制作用以及案例

    mysql主从复制 简要: 一.mysql用户授权 二.mysql bin-log日志 三.mysql主从复制   一.mysql用户授权 1.命令 2.作用:进行权限控制 3.样例: (备注: 同意 ...

  6. 小贝_mysql数据库备份与恢复

    mysql数据库备份与恢复 简要:        一.数据库备份        二.数据库恢复 一.数据库备份 1.备份简单说明 : 系统执行中,增量备份与总体备份 例: 每周日总体备份一次,周一到周 ...

  7. 小贝_mysql 存储过程

    存储过程 简要: 1.什么是存储过程 2.使用存储过程 一.存储过程 概念类似于函数,就是把一段代码封装起来.当要行这段代码的时候,能够通过调用该存储过程来实现.在封装的语句体里面.能够用if/els ...

  8. 小贝_mysql三种子查询

    mysql三种子查询 简要: 一.三种子查询 二.三种子查询理解模型 一.mysql 三种子查询 where子查询.from子查询.exists子查询 二.理解模型: 2.1.一个好的模型,便于我们去 ...

  9. 小贝_mysql select5种子句介绍

    mysql select5种子句介绍 简要 一.五种字句 二.具体解释五种字句 一.五种字句 where.group by.having.order by.limit 二.具体解释五种字句 2.1.理 ...

随机推荐

  1. maven打包oracle jdbc驱动

    背景 由于版权问题,maven中央仓库缺少oracle jdbc的驱动,这个给开发带来了很多不便利性.也出现各种各样的解决方案,基本就两种思路: 将oracle驱动安装到本地仓库,这个需要大家统一好名 ...

  2. 条款32:确定你的public继承塑模出is-a 关系(Make sure public inheritacne models "is-a")

    NOTE : 1."public继承"意味is-a.适用于base classes  身上的每一件事一定也适用于derived classes身上,因为每一个derived cla ...

  3. Python数据可视化库-Matplotlib(一)

    今天我们来学习一下python的数据可视化库,Matplotlib,是一个Python的2D绘图库 通过这个库,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率图,条形图,错误图,散点图等等 废 ...

  4. 自动化项目配置或用例文件格式推荐--yaml

    关于yaml YAML语言的设计目标,就是方便人类读写.如果你想要实现一些用ini不好做到的配置,可以使用yaml格式作为配置文件 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使 ...

  5. 【转】关于大型网站技术演进的思考(二十一)--网站静态化处理—web前端优化—下【终篇】(13)

    本篇继续web前端优化的讨论,开始我先讲个我所知道的一个故事,有家大型的企业顺应时代发展的潮流开始投身于互联网行业了,它们为此专门设立了一个事业部,不过该企业把这个事业部里的人事成本,系统运维成本特别 ...

  6. 使用windows操作EXCEL如何关闭EXCEL进程

    经常项目上有导入excel的需求,其实导入一个固定格式的excel数据非常容易,但是,发现一个问题就是,导入excel后,用户在打开excel时,必须要打开2次才能打开excel,这让人很不爽:开始查 ...

  7. CF778A:String Game

    给出字符串s和t,以及s的长度n的一个全排列,求按照这个排列依次删除s的字符,删到何时s中不含子序列t. 解法一: t中的每个字符的位置在s中跳啊跳,合法的情况下t中的字符在s中的位置应该是单调递增的 ...

  8. msp430入门编程34

    msp430中C语言的可移植--消除硬件差异

  9. Java实验--统计字母出现频率及其单词个数

    本周的实验要求在之前实现统计单词的基础之上(可以见之前博客的统计单词的那个实验),对其进行修改成所需要的格式,统计字母出现频率的功能,并按照一定的格式把最终结果的用特定的格式在文本中显示出来 统计过程 ...

  10. Springmvc 前台传递参数到后台需要数据绑定

    我们知道,当提交表单时,controller会把表单元素注入到command类里,但是系统注入的只能是基本类型,如int,char,String.但当我们在command类里需要复杂类型,如Integ ...