您好,欢迎访问数据库运维|优化|安装|迁移|服务官网!
13261661949
数据库性能优化结构的优化,梅花香自苦寒来-数据库优化-数据库运维|优化|安装|迁移|服务_uDBok.com
联系我们

数据库性能优化结构的优化,梅花香自苦寒来-数据库优化-数据库运维|优化|安装|迁移|服务_uDBok.com

地址:北京市昌平区高新经济开发区
手机:13261661949

咨询热线13261661949

数据库性能优化结构的优化,梅花香自苦寒来

发布时间:2021-02-03 05:58:14人气:2425
  • [list:title]

之前我们更新MySQL优化查询的学习内容,今天我们持续来学习MySQL数据库优化结构。每天深入一小时,铢积寸累,大厂就在向你招手!!!
一个好的数据库规划方案关于数据库的功能常常会起到事半功倍的作用。合理的数据库结构不仅能够使数据库占用更小的磁盘空间,并且能够使查询速度更快。数据库结构的规划,需求考虑数据冗余、查询和更新的速度、字段的数据类型是否合理等多方面的内容。
将字段许多的表分化成多个表
关于字段较多的表,假如有些字段的运用频率很低,能够将这些字段分离出来形成新表。由于当一个表的数据量很大时,会由于运用频率低的字段的存在而变慢。
假设会员表存储会员登录认证信息,该表中有许多字段,如id、名字、密码、地址、电话、个人描述字段。其间地址、电话、个人描述等字段并不常用。能够将这些不常用字段分化出另外一个表。将这个表取名叫members_ _detail。 表中有member_ jid、address 、telephone、description 等字段。其间,member_ id是会员编号,address 字段存储地址信息,telephone字段存储电话信息,description 字段存储会员个人描述信息。这样就把会员表分红两个表,别离为members表和mermber_detail 表。
创立这两个表的SQL句子如下:
这两个表的结构如下:
假如需求查询会员的详细信息,能够用会员的id来查询。假如需求将会员的底子信息和详细信息一起显现,能够将members表和members_ detail 表进行联合查询,查询句子如下:
SELECT*FROM members LEFT JOIN members_ detail ON members .
id-members detail.
member_ id;
经过这种分化,能够进步表的查询效率。关于字段许多且有些字段运用不频繁的表,能够经过这种分化的方式来优化数据库的功能。
添加中心表
关于需求常常联合查询的表,能够树立中心表以进步查询效率。经过树立中心表,把需求常常联合查询的数据刺进到中心表中,然后将本来的联合查询改为对中心表的查询,以此来进步查询效率。本末节将为读者介绍添加中心表优化查询的办法。
首先,剖析常常联合查询表中的字段。然后,运用这些字段树立一个中心表,并将本来联合查询的表的数据刺进到中心表中。最后,能够运用中心表来进行查询了。
会员信息表和会员组信息表的SQL句子如下:
查询会员信息表和会员组信息表。
已知现在有一个模块需求常常查询带有会员组称号、会员组补白(remark) 、会员用户名信息的会员信息。依据这种状况能够创立-一个temp_ _vip 表。temp_ vip表中存储用户名(user_ name),会员组称号(group_ name) 和会员组补白( group_ remark) 信息。创立表的句子如下:
接下来,从会员信息表和会员组表中查询相关信息存储到暂时表中:
今后,能够直接从temp_ vip 表中查询会员名、会员组称号和会员组补白,而不必每次都进行联合查询。这样能够进步数据库的查询速度。
添加冗余字段
规划数据库表时应尽量遵从范式理论的规约,尽可能削减冗余字段,让数据库规划看起来精致、高雅。可是,合理地加入冗余字段能够进步查询速度。本末节将为读者介绍经过添加冗余字段来优化查询速度的办法。
表的规范化程度越高,表与表之间的联系就越多,需求衔接查询的状况也就越多。例如,职工的信息存储在staff表中,部分信息存储在department表中。经过staff表中的department_id字段与department 表树立相关联系。假如要查询一个职工地点部分的称号,有必要从staff 表中
查找职工地点部分]的编号(department id),然后依据这个编号去department表查找部分的称号。假如常常需求进行这个操作,衔接查询会糟蹋许多时刻。能够在staff 表中添加一个冗余字段deartment. name,该字段用来存储职工地点部分的称号,这样就不必每次都进行衔接操作了。
冗余字段会导致一些问题。比方,冗余字段的值在一个表中被修改了,就要想办法在其他表中更新该字段。不然就会使本来共同的数据变得不共同。分化表、添加中心表和添加冗余字段都糟蹋了一定的磁盘空间。从数据库功能来看,为了进步查询速度而添加少量的冗余大部分时分是能够接受的。是否经过添加冗余来进步数据库功能,这要依据实际需求综合剖析。
优化刺进记载的速度
刺进记载时,影响刺进速度的主要是索引、唯- -性校验、 一.次刺进记载条数等。依据这些状况,能够别离进行优化。本末节将为大家介绍优化刺进记载速度的几种办法。
关于MyISAM引擎的表,常见的优化办法如下:
1、禁用索引
关于非空表,刺进记载时,MySQL会依据表的索引对刺进的记载树立索引。假如刺进很大都据,树立索引会下降刺进记载的速度。为了处理这种状况。能够在刺进记载之前禁用索引,数据刺进完毕后再敞开索引。禁用索引的句子如下:
ALTER TABLE table name DISABLE KEYS;
其间table_ name是禁用索引的表的表名。
从头敞开索引的句子如下:
ALTER TABLE table_ name ENABLE KEYS;
关于空表批量导入数据,则不需求进行此操作,由于MyISAM引擎的表是在导入数据之后才树立索引的。
2、禁用仅有性查看
刺进数据时,MySQL会对刺进的记载进行唯- -性校验。 这种仅有-性校验 也会下降刺进记载的速度。为了下降这种状况对查询速度的影响,能够在刺进记载之前禁用仅有性查看,比及记载刺进完毕后再敞开。禁用唯- -性检 查的句子如下:
SET UNIQUE_CHECKS=0;
敞开仅有性查看的句子如下:
SET 3 UNIQUE_CHECKS=1;
3、运用批量刺进
刺进多条记载时,能够运用一条INSERT 句子刺进-条记载;也能够运用一-条 INSERT句子刺进多条记载。运用一条INSERT句子刺进一条记载的景象如下:
运用一条INSERT句子刺进多条记载的景象如下:
第2种景象的刺进速度要比第1种景象快。
4、运用LOAD DATA INFILE批量导入
当需求批量导入数据时,假如能用LOAD DATA INFILE句子,就尽量运用。由于LOAD DATA INFILE句子导入数据的速度比INSERT句子快。
关于InnoDB引擎的表,常见的优化办法如下:
1、禁用仅有性查看
刺进数据之前履行set unique_ checks=0 来制止对仅有索引的查看, 数据导入完结之后再运转set unique_ checks=1。 这个和MyISAM引擎的运用办法-样。
2、禁用外键查看
刺进数据之前履行制止对外键的查看,数据刺进完结之后再康复对外键的查看。禁用外键查看的句子如下:
SET foreign_key_ checks=0;
康复对外键的查看句子如下:
SET foreign_key_ checks=l;
3、制止主动提交
刺进数据之前制止业务的主动提交,数据导入完结之后,履行康复主动提交操作。制止主动提交的句子如下:
set autocommit=0;
康复主动提交的句子如下:
set autocommit=l ;
剖析表、查看表和优化表
MySQL供给了剖析表、查看表和优化表的句子。剖析表主要是剖析关键字的散布:查看表主要是查看表是否存在过错:优化表主要是消除删去或者更新形成的空间糟蹋。本末节将为大家介绍剖析表、查看表和优化表的办法。
1、剖析表
MySQL中供给了ANALYZE TABLE句子剖析表ANALYZE TABLE句子的底子语法如下:
ANALYZE [LOCAL1 NO_ WRITE TO_ BINLOG] TABLE tbl_ name[, tbl_ name]...
LOCAL关键字是NO_ WRITE_ _TO_ BINLOG关键字的别名,二者都是履行过程不写入二进制日志,tbl_ _name 为剖析的表的表名,能够有一个或多个。
运用ANALYZE TABLE剖析表的过程中,数据库系统会主动对表加一个只读锁。在剖析期间,只能读取表中的记载,不能更新和刺进记载。ANALYZE TABLE句子能够剖析InnoDB、BDB和MyISAM类型的表。
运用ANALYZE TABLE来剖析message表,履行的句子及成果如下:
上面成果显现的信息阐明如下:
Table: 表明剖析的表的称号。
Op:表明履行的操作。analyze 表明进行剖析操作。
Msg_ type: 表明信息类型,其值通常是状态(status) 、信息(info)、注意( note )正告(warmning) 和过错(error) 之一。
Msg_ text:显现信息。
2、查看表
MySQL中能够运用CHECK TABLE句子来查看表CHECK TABLE句子能够查看InnoDB和MyISAM类型的表是否存在过错。关于MyISAM类型的表,CHECK TABLE句子还会更新关键字统计数据。并且,CHECK TABLE也能够查看视图是否有过错,比方在视图定义中被引用的表已不存在。该句子的底子语法如下:
CHECK TABLE tb1 name [,tbl name]...[option]...
option = {QUICK 1 FASTI MEDIUM | EXTENDED 1 CHANGED }
其间,tbl. name是表名; option 参数有5个取值,别离是QUICK、FAST、MEDIUM、EXTENDED和CHANGED。各个选项的含义别离是:
QUICK: 不扫描行,不查看过错的衔接。
FAST: 只查看没有被正确封闭的表。
CHANGED: 只查看.上次查看后被更改的表和没有被正确封闭的表。
MEDIUM:扫描行,以验证被删去的衔接是有效的。也能够计算各行的关键字校验和,并运用计算出的校验和验证这一点。
EXTENDED: 对每行的一切关键字进行一个全面的关键字查找这能够确保表是100%共同的,可是花的时刻较长。
option只对MyISAM类型的表有效,对InnoDB类型的表无效。CHECK TABLE句子在履行过程中也会给表加上只读锁。
3、优化表
MySQL中运用OPTIMIZE TABLE句子来优化表。该句子对InnoDB和MyISAM类型的表都有效。可是,OPTILMIZE TABLE句子只能优化表中的VARCHAR、BLOB或TEXT类型的字段。OPTILMIZE TABLE句子的底子语法如下:
OPTIMIZE [ LOCAL | NO_WRITE_TO_BINLOG] TABLE tbL_name [,tbl name ]...
LOCAL | NO_ WRITE_ TO_ BINLOG 关键字的含义和剖析表相同,都是指定不写入二进制日志; tbl_ name是表名。经过OPTIMIZE TABLE句子能够消除删去和更新形成的文件碎片。OPTIMIZE TABLE句子在履行过程中也会给表加上只读锁。
一个表运用了TEXT或者BLOB这样的数据类型,假如已经删去了表的一大部分,或者已经对含有可变长度行的表(含有VARCHAR, BLOB或TEXT列的表)进行了许多更新,则应运用OPTIMIZE TABLE来从头利用未运用的空间,并整理数据文件的碎片。在大都的设置中,底子不需求运转OPTIMIZE TABLE。即便对可变长度的跋涉行了很多的更新,也不需求常常运转,每周一次或每月一次即可,并且只需求对特定的表运转。
以上便是小编整理的MySQL优化数据库结构,算是MySQL优化的核心内容了,抛砖引玉,仅仅小编个人的理解,欢迎各位大佬多多评论沟通,我们共同进步!!!

推荐资讯

13261661949