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. linux破解root登录密码,并重置

    重启系统后按'e'键,进入编辑模式,在'UTF -8'后空格输入'rd.break'后,按快捷键'Ctrl+X'进入新界面进行编辑,代码如下: switch_root:/# mount -o remo ...

  2. django扩展User模型(model),profile

    from django.contrib.auth.models import User # Create your models here. class Profile(models.Model): ...

  3. Python 函数的初识

    1.函数的初识 函数的作用:以功能为导向 减少代码重复 # 函数试编程 # 函数以功能(完成一件事)为导向,登录 注册, # 一个函数就是一个功能,一个函数只能写一个功能 # 何时需要 何时调用,随调 ...

  4. 我的Python分析成长之路1

    Python是什么?                                                                                           ...

  5. 解决Can’t finish GitHub sharing process Successfully created project ‘GitHubDemo’ on GitHub

    Can't finish GitHub sharing process        Successfully created project 'KeyWordsFrameWork' on GitHu ...

  6. PC硬件以及引导加载器

    PC 硬件 本文介绍供 x86 运行的个人计算机(PC)硬件平台. PC 是指遵守一定工业标准的计算机,它的目标是使得不同厂家生产的机器都能够运行一定范围内的软件.这些标准随时时间迁移不断变化,因此9 ...

  7. Codeforces Round #388 (Div. 2) A+B+C!

    A. Bachgold Problem 任何一个数都可以由1和2组成,由于n是大于等于2的,也就是可以由2和3组成.要求最多的素数即素数越小越好,很明显2越多越好,如果n为奇数则再输出一个3即可. i ...

  8. 【模拟】2017 Multi-University Training Contest 1 The Battle of Chibi

    acm.hdu.edu.cn/showproblem.php?pid=5542 [Accepted] #include<iostream> #include<cstdio> # ...

  9. 深入理解计算机操作系统——第11章:全球IP英特网

    全球IP英特网 (1)每台英特网主机都运行实现TCPIP协议的软件. (2)英特网的客户端和服务器混合使用套接字接口函数和Unix IO函数来进行通信. (3)套接字函数典型的是作为陷入内核的系统调用 ...

  10. POJ 2488 A Knight's Journey【DFS】

    补个很久之前的题解.... 题目链接: http://poj.org/problem?id=2488 题意: 马走"日"字,让你为他设计一条道路,走遍所有格,并输出字典序最小的一条 ...