一 避免网页访问错误

1  数据库连接timeout产生页面5xx错误

2 慢查询造成页面无法加载

3 阻塞造成数据无法提交

二 增加数据库的稳定性

三 优化用户体验

1 流畅的页面访问速度

2 良好的网站功能体验

几个优化方面

硬件-系统配置-数据库表结构-SQL及索引

1 成本: 高 > 底

2 效果: 底 > 高

优化方面

一 SQL 语句优化

1 SQL及索引优化

如何发现有问题的SQL?

使用MySQL慢查询日志对有效率问题的SQL进行监控

下面语句可以开启满查询日志:

show variables like 'slow_query_log' 查看这个是否开启慢查询日志

set global slow_query_log_file='/home/mysql/sql_log/mysql-slow.log'慢查询日志存储的文件位置在哪里

set global log_queries_not_using_indexs=on 指定是否要把没有使用索引的sql,记录到慢查询的日志中

set global long_query_time =1 指定一个时间,超过这个时间如1s之后,查询记录到查询日志中

慢查询日志包含的内容

1 执行SQL的主机内容

2 SQL执行的信息

3 SQL执行的时间

4 SQL执行的内容

MySQL 慢查询日志

工具一

pt-query-digest

如何分析SQL语句

使用explain查询SQL的执行计划 如 explain select username from user;

Count() 和Max()优化

....

SQL及索引优化

如何选择合适的列建立索引?

1. 在where从句,group by 从句,order by 从句,on 从句中出现的列

2.索引字段越小越好

3 离散度大的列放到联合索引的前面

索引的维护及优化 --- 重复及冗余索引

索引的维护及优化 --- 重复及冗余索引

冗余索引是指多个索引的前缀列相同,或是在联合索引中包含了主键的索引,下面这个例子中key(name,id)

就是一个冗余索引。

索引的维护及优化 --- 查找重复及冗余索引

使用 pt-duplicate-key-checker 工具检查重复及冗余索引

索引的维护及优化 --- 删除不用索引

数据库结构优化

选择合适的数据类型

数据类型的选择,充电在于 合适二字,如何确定选择的数据类型是否合适?

1.使用可以存下你的数据的最小的数据类型。

2.使用简单的数据类型。Int要比varchar类型在MySQL处理上简单。

3.尽可能的使用 not null  定义字段。

4. 尽量少用text类型,非用不可时最好考虑分表。

选择合适的数据类型

使用int来存储日期时间,利用 FROM_UNIXTIME(),UNIX_TIMESTAMP()两个函数来进行转换

选择合适的数据类型

使用bigint来Ip 地址

表的范式化和反范式化

范式化是指数据库设计的规范,目前说到范式化一般是指第三设计范式,也就是要求数据表中不存在非关键字

段对任意候选关键字段的传递函数依赖则符合第三范式

表的范式化和反范式化

不符合第三范式要求的表存在下列问题:

1. 数据冗余:(分类,分类描述)对于每一个商品都会进行记录,

2.数据的插入异常

3.数据的更新异常

4.数据的删除异常

表的范式化和反范式化

反范式化是指为了查询效率的考虑把原本符合第三范式的表适当的增加冗余,已达到查询效率的目的,反

范式化是一种以空间来换时间的操作。

表的垂直拆分

所谓的垂直拆分,就是把原来一个有很多列的表拆分成多个表,这解决了表的宽度问题。通常

垂直拆分可以按一下原则进行:

1.把不常用的字段单独存放到一个表中。

2.把大字段独立存放到一个表中。

3.把经常一起使用的字段放到一起。

表的水平拆分

表的水平拆要是为了解决单表的数据量过大的问题,水平拆分的表每一个表的结构都是完全一致大的,

表的水平拆分

常用的水平拆分方法为:

1.对customer_id 进行hash运算,如果要拆分成5个表则使用mod(customer_id,5)取出0-4个值

2.针对不同的hashID把数据存到不同的表中。

Mysql 数据库优化(一)的更多相关文章

  1. 关于MySQL数据库优化的部分整理

    在之前我写过一篇关于这个方面的文章 <[原创]为什么使用数据索引能提高效率?(本文针对mysql进行概述)(更新)> 这次,主要侧重点讲下两种常用存储引擎. 我们一般从两个方面进行MySQ ...

  2. 【MySQL】花10分钟阅读下MySQL数据库优化总结

    1.花10分钟阅读下MySQL数据库优化总结http://www.kuqin.com2.扩展阅读:数据库三范式http://www.cnblogs.com3.my.ini--->C:\Progr ...

  3. 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决(转载)

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  4. 50多条mysql数据库优化建议

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存 ...

  5. 解开发者之痛:中国移动MySQL数据库优化最佳实践(转)

    开源数据库MySQL比较容易碰到性能瓶颈,为此经常需要对MySQL数据库进行优化,而MySQL数据库优化需要运维DBA与相关开发共同参与,其中MySQL参数及服务器配置优化主要由运维DBA完成,开发则 ...

  6. 30多条mysql数据库优化方法【转】

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  7. 百万行mysql数据库优化和10G大文件上传方案

    百万行mysql数据库优化和10G大文件上传方案 最近这几天正在忙这个优化的方案,一直没时间耍,忙碌了一段时间终于还是拿下了这个项目?项目中不要每次都把程序上的问题,让mysql数据库来承担,它只是个 ...

  8. 从运维角度来分析mysql数据库优化的一些关键点【转】

    概述 一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善. 1.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分 ...

  9. 关于mysql数据库优化

    关于mysql数据库优化 以我之愚见,数据库的优化在于优化存储和查询速度 目前主要的优化我认为是优化查询速度,查询速度快了,提高了用户的体验 我认为优化主要从两方面进行考虑, 优化数据库对象, 优化s ...

  10. mysql数据库优化 pt-query-digest使用

    mysql数据库优化 pt-query-digest使用 一.pt-query-digest工具简介 pt-query-digest是用于分析 mysql慢查询的一个工具,它可以分析binlog.Ge ...

随机推荐

  1. BOM头导致 php获取数据出现问题

    1.BOM头导致 php获取数据出现问题   2.access-token 存redis 解决方案:存redis 一.下载redis驱动 二.配置redis

  2. angular.module()创建、获取、注册angular中的模块

    // 传递参数不止一个,代表新建模块;空数组代表该模块不依赖其他模块 var createModule = angular.module("myModule", []); // 只 ...

  3. 【python之路9】类型定义与转换

    一.整型(int),int的作用 1.创建int类型并赋值 n = 10 或者 n = int(10)   #只要是类名加括号,都会去执行类中的 __init__()方法 n = 10,实际内部会去执 ...

  4. web前端学习(四)JavaScript学习笔记部分(1)-- JavaScript基础教程

    1.JavaScript基础教程 1.1.Javascript基础-介绍.实现.输出 1.1.1.JavaScript是互联网上最流行的脚本语言,这门语言可用于web和HTML,更可广泛用于服务端.p ...

  5. Poj 1830 高斯消元

    开关问题 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 5418 Accepted: 2022 Description 有N个相 ...

  6. GitHub的注册与使用

    1. 注册账号: 地址: https://github.com/输入账号.邮箱.密码,然后点击注册按钮. 2. 初始设置 注册完成后,选择Free免费账号完成设置 3.验证账号 新建一个仓库 发现邮箱 ...

  7. 【Pyqt5】自定义信号简单原理(易懂版),多窗口交互,传输数据,调用方法

    PS:如果你想在2窗口调用1窗口的内部方法,或者在2窗口传递数据给1窗口数据,本片博客可以放心食用 主窗口: class MainWindow(QWidget,Ui_MainFrom): insert ...

  8. 常用命令4-文件搜索命令 2- whereis

    whereis比较局限,只能查看系统命令.

  9. FZU 1575 小学生的游戏【模拟二分】

    某天,无聊的小斌叫上几个同学玩游戏,其中有比较笨的小兴,比较傻的小雪,可爱的小霞和自以为是的小楠.他们去找聪明的小明去给他们当裁判.判定谁取得游戏胜利. 而这个游戏是由小斌想个1到10000000的数 ...

  10. 关于如何在部署环境修改process.env & 本地测试

    前言 最近在搞一些监控的东西, 需要根据不同的环境上报到不同的地址,中间遇到了一些问题,在这里简单总结分享下. 关于process.env 假如你对process.env 相关的概念还不熟悉, 请移步 ...