mysql数据库优化之表的设计和慢查询定位
一、数据库优化包含的方面
数据库优化是一种综合性的技术。并非通过某一种方式让数据库效率提高非常多。而是通过多方面的提高。从而使得数据库性能提高。
主要包含:
1、表的设计合理化(3范式)
2、给表加入合适的索引。怎样使用索引
3、分表技术(水平切割、垂直切割)
4、定时清除数据垃圾,定时碎片整理
5、多用存储过程和触发器
6、对mysql配置进行优化
7、读写分离
8、mysqlserver硬件升级。
二、数据库的设计
步骤:
1、收集信息:与该系统有关人员进行交流。充分了解数据库须要完毕的任务
2、标识实体:详细存在的对象,名词。
比方:用户、帖子、回帖、板块
3、标识属性
4、标识关系:
1)一对一:两个表的主键是公共字段
2)一对多:主键和非主键建关系
3)多对一:非主键和主键建关系
4)多对多:非主键和非主键建关系
5、将E-R图转成表
1)将实体转成表,将属性转成字段
2)假设找不到一个合适的字段做主键,我们加入一个自己主动增长列做主键。
3)建立正确的关系
三、数据规范化
表设计出来以后,并非最合理的结构。我们须要对表进行规范化(我们通过3范式来对表进行规范化)
先满足第一范式--再满足第二范式--再满足第三范式
1NF: 确保每列的原子性
第一范式用来规范化全部的字段,全部的字段都不可再分
注意:比方地址这个字段。假设不分类汇总、不排序。只起一个字符串的作用。这时我们不拆(反3范式)
2NF: 非键字段必须依赖于主键字段
假设一个关系满足1NF,而且除了主键以外其它列都依赖于该主键,则满足第二范式(2NF)
3NF: 消除传递依赖
在非主键字段中。假设一个字段能够推导还有一个字段,这就叫传递依赖。
四、规范化和性能的关系
1、为了满足某种商业目标。数据库性能比规范化数据库更重要
通过对给定的表中加入额外的字段,以大量降低须要从中搜索信息所须要的时间。
通过在给定的表中插入计算列(比方成绩总分),以方便查询
2、进行规范化的同一时候须要考虑数据库的性能
五、定位慢查询
找出查询速度较慢的SQL语句。
增、删、改、查
当中查询占90%,增删改共占10%
Mysql数据库一些关于状态的查询
用"show status"
指令 说明
show status 查询mysql数据库的一些执行状态
show status like 'com_insert'; 显示运行了多少次插入操作
show status like 'com_update'; 显示运行了多少次更新操作
show status like 'com_delete'; 显示运行了多少次删除操作
show status like 'com_select'; 显示运行了多少次查询操作
show status like 'uptime'; 显示mysql启动了多长时间,假设时间非常长了,数据库表的存储引擎有的是myisam,这时候注意要碎片整理。
show [session | global ] status like...,假设不写,默认是会话级(session),想要查询从mysql启动一直到如今,用global。
显示慢查询
show variables like 'long_query_time' 显示慢查询的时间,默认是10秒
set long_query_time=0.5 把慢查询的时间设置为0.5秒,以便于測试
show status like 'slow_queries' 显示慢查询的时间,默认是10秒
定位慢查询(开启慢查询日志)
一旦开启慢查询日志以后。日志文件的位置在my.ini文件里去查找,默认情况下mysql不会记录慢查询
怎样开启慢查询:
1、关闭当前mysql服务:net stop mysql
2、通过安全模式启动就会写日志。
3、关闭安全模式启动的mysql
4、把慢查询的时间设置为0.5秒,set long_query_time=0.5
5、select * from table where xx='00' ;
6、到慢查询日志中去找相应的SQL语句。
反三范式:
范式越高。数据冗余就越少,可是有时就效率就越低下,为了提高执行效率,能够适当的让数据冗余。
mysql数据库优化之表的设计和慢查询定位的更多相关文章
- MYSQL 数据库名、表名、字段名查询
//查询所有表的所有字段: select * from information_schema.columns where table_name='sys_users' 效果: //查询指定表的所有字段 ...
- mysql数据库优化课程---11、mysql普通多表查询
mysql数据库优化课程---11.mysql普通多表查询 一.总结 一句话总结:select user.username,user.age,class.name,class.ctime from u ...
- MySQL数据库优化、设计与高级应用
MySQL数据库优化主要涉及两个方面,一方面是对SQL语句优化,另一方面是对数据库服务器和数据库配置的优化. 数据库优化 SQL语句优化 为了更好的看到SQL语句执行效率的差异,建议创建几个结构复杂的 ...
- mysql数据库优化课程---16、mysql慢查询和优化表空间
mysql数据库优化课程---16.mysql慢查询和优化表空间 一.总结 一句话总结: a.慢查询的话找到存储慢查询的那个日志文件 b.优化表空间的话可以用optimize table sales; ...
- mysql数据库优化课程---3、数据库设计是什么
mysql数据库优化课程---3.数据库设计是什么 一.总结 一句话总结: 就是设计各个字段及各个字段类型 1.char,varchar,text同存'ABC'的存储空间为多少? char(255): ...
- 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 值判断,否则将导致引擎放弃使用索 ...
随机推荐
- HDU4300 Clairewd’s message(拓展kmp)
Problem Description Clairewd is a member of FBI. After several years concealing in BUPT, she interce ...
- java 数据库
1.数据的概述 数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的的原始素材. 数据是信息的表现形式和载体,可以是符号.文字.数字.语音.图像.视频等.数据和信 ...
- ARP 协议
1. 什么是ARP协议? 网络层以上的协议用IP地址来标识网络接口,但以太数据帧传输时,以物理地址来标识网络接口.因此我们需要进行IP地址与物理地址之间的转化.对于IPv4来说,我们使用ARP地址解析 ...
- python虚拟环境的搭建及作用
Python的虚拟环境可以使一个Python程序拥有独立的库library和解释器interpreter,而不用与其他Python程序共享统一个library和interpreter.虚拟环境的好处是 ...
- 自定义函数导致的sql性能问题
同事说,某某报表跑的很慢,让我调查一下 优化前:该报表整体需要跑4小时以上. sql代码如下 SELECT /*省略多数查询字段*/ REP_FUN_REFCODEVALUE /*自定义函数*/ (P ...
- python基础教程之pymongo库
1. 引入 在这里我们来看一下Python3下MongoDB的存储操作,在本节开始之前请确保你已经安装好了MongoDB并启动了其服务,另外安装好了Python的PyMongo库. 1. 安装 pi ...
- 【UVA 1636】 (条件概率)
题链:https://cn.vjudge.net/problem/UVA-1636 题意 给出一把枪的子弹序列,已知开了一枪且无子弹,问下一步的决策是旋转,还是开下一枪 题解 已知开一枪没子弹,下一枪 ...
- 大数据学习——mapreduce倒排索引
数据 a.txt hello jerry hello tom b.txt allen tom allen jerry allen hello c.txt hello jerry hello tom 1 ...
- POJ-1797Heavy Transportation,最短路变形,用dijkstra稍加修改就可以了;
Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K Description Background Hugo ...
- 用SQLLDR来装载date类型的控制文件
以前给山东某单位做oracle数据库恢复得时候,恢复出来得数据中包含date类型,当时给客户提供得是sqlldr得方式,因为数据量比较大,用sqlldr装载起来速度比较快,所以采用了这种方式,结果在装 ...