mysql 优化表 慢_mysql数据库优化之表的设计和慢查询定位

一、数据库优化包含的方面

数据库优化是一种综合性的技术。并非通过某一种方式让数据库效率提高非常多。而是通过多方面的提高。从而使得数据库性能提高。

主要包含:

1、表的设计合理化(3范式)

2、给表加入合适的索引。怎样使用索引

3、分表技术(水平切割、垂直切割)

4、定时清除数据垃圾,定时碎片整理

5、多用存储过程和触发器

6、对mysql配置进行优化

7、读写分离

8、mysqlserver硬件升级。

二、数据库的设计

步骤:

1、收集信息:与该系统有关人员进行交流。充分了解数据库须要完毕的任务

852055942c3a5e9eb38aba14c57f47dd.png

2、标识实体:详细存在的对象,名词。

比方:用户、帖子、回帖、板块

3、标识属性

9011a78aaf5c4d18bd430e1b7414eacb.png

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、通过安全模式启动就会写日志。

092b7e5703d482dd47ac8c76ad86bf12.png

3、关闭安全模式启动的mysql

f5c3332eb3a56eb7b761ae32d729ced6.png

4、把慢查询的时间设置为0.5秒,set long_query_time=0.5

5、select * from table where xx='00' ;

6、到慢查询日志中去找相应的SQL语句。

反三范式:

范式越高。数据冗余就越少,可是有时就效率就越低下,为了提高执行效率,能够适当的让数据冗余。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值