Mysql 数据库优化(一)
一 避免网页访问错误
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 数据库优化(一)的更多相关文章
- 关于MySQL数据库优化的部分整理
在之前我写过一篇关于这个方面的文章 <[原创]为什么使用数据索引能提高效率?(本文针对mysql进行概述)(更新)> 这次,主要侧重点讲下两种常用存储引擎. 我们一般从两个方面进行MySQ ...
- 【MySQL】花10分钟阅读下MySQL数据库优化总结
1.花10分钟阅读下MySQL数据库优化总结http://www.kuqin.com2.扩展阅读:数据库三范式http://www.cnblogs.com3.my.ini--->C:\Progr ...
- 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决(转载)
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 50多条mysql数据库优化建议
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存 ...
- 解开发者之痛:中国移动MySQL数据库优化最佳实践(转)
开源数据库MySQL比较容易碰到性能瓶颈,为此经常需要对MySQL数据库进行优化,而MySQL数据库优化需要运维DBA与相关开发共同参与,其中MySQL参数及服务器配置优化主要由运维DBA完成,开发则 ...
- 30多条mysql数据库优化方法【转】
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 百万行mysql数据库优化和10G大文件上传方案
百万行mysql数据库优化和10G大文件上传方案 最近这几天正在忙这个优化的方案,一直没时间耍,忙碌了一段时间终于还是拿下了这个项目?项目中不要每次都把程序上的问题,让mysql数据库来承担,它只是个 ...
- 从运维角度来分析mysql数据库优化的一些关键点【转】
概述 一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善. 1.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分 ...
- 关于mysql数据库优化
关于mysql数据库优化 以我之愚见,数据库的优化在于优化存储和查询速度 目前主要的优化我认为是优化查询速度,查询速度快了,提高了用户的体验 我认为优化主要从两方面进行考虑, 优化数据库对象, 优化s ...
- mysql数据库优化 pt-query-digest使用
mysql数据库优化 pt-query-digest使用 一.pt-query-digest工具简介 pt-query-digest是用于分析 mysql慢查询的一个工具,它可以分析binlog.Ge ...
随机推荐
- IoT: 物联网安全测试经验总结
前言 今年早些时候,我参与了许多关于物联网解决方案的安全测试.主要目标是找出体系结构和解决方案中的漏洞.在这篇文章中,我将讨论一些与物联网解决方案的问题和挑战. 什么是物联网? 在你学习有关IPv6的 ...
- DEV GridControl 控件属性大全
Devpress.XtraGrid.GridControl.GridView 属性 说明 Options OptionsBehavior 视图的行为选项 AllowIncrementalSearch ...
- python使用cPickle模块序列化实例
python使用cPickle模块序列化实例 这篇文章主要介绍了python使用cPickle模块序列化的方法,是一个非常实用的技巧,本文实例讲述了python使用cPickle模块序列化的方法,分享 ...
- 在C#应用中使用Common Logging日志接口
我在C#应用中一般使用log4net来记录日志,但如果项目中有个多个工程,那么没有工程都需要引用log4neg,感觉很不爽.不过今日在开spring.net的时候,看到了有个通用日志接口Common ...
- MarioTCP, take it..
MrioTCP,超级马里奥,顾名思义,他不仅高效,而且超级简易和好玩.同时他可以是一个很简洁的Linux C 开发学习工程.毫不夸张的说,如果全部掌握这一个工程,你会成为一个Linux C的牛人:当然 ...
- Laravel 5.2 使用 JWT 完成多用户认证 | Laravel China 社区 - 高品质的 Laravel 开发者社区 - Powered by PHPHub
Json Web Token# JWT代表Json Web Token.JWT能有效地进行身份验证并连接前后端. 降地耦合性,取代session,进一步实现前后端分离 减少服务器的压力 可以很简单的实 ...
- 常用命令4-文件搜索命令 2- whereis
whereis比较局限,只能查看系统命令.
- 微服务开源生态报告 No.6
「微服务开源生态报告」,汇集各个开源项目近期的社区动态,帮助开发者们更高效的了解到各开源项目的最新进展. 社区动态包括,但不限于:版本发布.人员动态.项目动态和规划.培训和活动. 非常欢迎国内其他微服 ...
- TCP keepalive的机理及使用
TCP 是面向连接的 , 在实际应用中通常都需要检测对端是否还处于连接中.如果已断开连接,主要分为以下几种情况: 1.连接的对端正常关闭,即使用 closesocket 关闭连接. 2.连接的对端非正 ...
- windows中Navicat连接centos中的mysql报:1130-Host '192.168.xxx.1' is not allowed to connect to this MySQL解决方法
解决方法: 在centos中登录mysql输入下面指令: grant all PRIVILEGES on *.* to ' WITH GRANT OPTION;