栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MySQL数据库优化

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL数据库优化

1.7.1 为什么要做数据库优化?

系统的数据从数据库中获取,数据库的数据吞吐量在一定程度上决定系统的并发和响应速度

系统运行和数据量成正比,数据读处理尤其是查询自然慢

MySQL数据库数据在磁盘持久化,读写不如Redis这些内存数据库

1.7.2 数据库优化一般从以下几个方面:

根据你以往的经验简单叙述一下MYSQL的优化

a、尽可能使用更小的整数类型.(mediumint就比int更合适).

b、尽可能的定义字段为not null,除非这个字段需要null.

c、如果想要清空表的所有记录,建议用truncate table tablename而不是delete from tablename.

d、避免出现SELECt * FROM table 语句,要明确查出的字段。

e、小心使用 IN 和 OR,需要注意In集合中的数据量。建议集合中的数据不超过200个

数据库设计:

        数据库设计表三范式,使用合适的数据类型,使用合适的存储引擎

        适当创建索引

数据库扩展:

        数据库的分表分库,读写分离等

        sql语句优化等

数据类型

尽量使用可以正确存储数据的最小数据类型 更小的数据类型意味着更快,占用更少的磁盘,内存、缓存和处理时间

尽量使用整型表示字符串 因为字符集和校对规则,使处理字符比整型更复杂,比如:我们使用数据库内置的datetime类型存储时间而不是字符类型,我们 使用整型存储ip而不是直接将ip字符串存到数据库中

尽可能使用not null 这个值是很烦人的,建字段时请尽量指定是否非空,NULL使得索引,统计,比较都变得更复杂,而且索引尽量不要创建到可以为 null的字段上

字符串类型

VARCHAR是可变长字符串 比定长字符串(CHAR)更节省空间,仅使用必要的空间另外VARCHAR需要额外字节记录字符串长度(不同情况需要字节数不同)

CHAR类型是定长字符串 开发中基本很少用(一些公司甚至基本上不考虑这种类型了),注意:字符串长度定义不是字节数,是字符数

日期和时间类型

datetime 使用8字节存储空间,保存从1001年到9999年的秒数。与时区无关,默认情况下,Mysql以一种可排序的格式显示它的值,例如:"2018-10-14 22:30:08"

timestamp 只使用4字节存储,保存1970年1月1日午夜以来的秒数,依赖于系统时区,和UNIX时间戳相同,转换函数分别为FROM_UNIXTIME()和UNIX_TIMESTAMP(),可以设置根据当前时间戳更新,比如我们熟悉的update_time字段

整数类型

UNSIGNED 属性表示不允许负值,可以使得正数的上限提高一倍,比如tinyint+unsigned可以使原本的-128~127的范围变为0~255

tinyint 我们一般用它存储状态值而不要用int,如果是Boolean类型,那么tinyint(1)当值为1和0时,查询结果自动转为true和false,条件参数相应的也可以直接传入true和false即可

INT(11) 不会限制值的范围,只是规定了一些客户端工具用来显示的字符的个数,所以对于存储和计算来说INT(11)和INT(1)相同

IP地址 实际上是32位无符号整数,用INT存储,Mysql提供转换函数为INET_ATON()和INET_NTOA()

小数 decimal不会损失精度,存储空间会随数据的增大而增大。double占用固定空间,较大数的存储会损失精度,通常存金额用decimal(11,2),这表示整数部分和小数部分分别为9位和2位注意!,当然可以根据具体的金额大小选择长度,注意这时候对应的java中用BigDecimal类来处理运算时要仔细,因为加减法和比较跟平常不一样

1.数据库设计3范式

数据库设计范式如果要满足N范式必须要先满足N-1范式

第一范式1NF:字段原子性:根据需求把字段分成最小单位

第二范式2NF:使每一行数据具有唯一性,并消除数据之间的“部分依赖”,使一个表中的非主键字段完全依赖于主键字段,使用一个自增的int类型的字段当主键

    有2个方面的要求:
    1、每一行数据具有唯一性:只要给表设计主键,就可以保证唯一性。
    2、消除数据之间的“部分依赖”(不允许有多个候选键);

第三范式3NF:使每个字段都独立地依赖于主键字段(独立性),而要消除其中部分非主键字段的内部依赖——这种内部依赖会构成“传递依赖”三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库!需求才是粑粑

1.7.3使用索引

索引是提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快得多的速度检索特定的行,尤其是在查询语句当中包含有MAX(),MIN()和ORDERBY这些命令的时候,性能提高更为明显。

1.8 数据库存储引擎 1.8.1 介绍

数据库存储引擎是数据库底层组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。我们可以通过SHOW ENGINES;

1.8.2 InnoDB存储引擎

InnoDB越做越好从MySQL5.5版本之后,MySQL的默认内置存储引擎已经是InnoDB,主要特点有

1.容灾恢复性比较好

2.支持事务,默认事务隔离界别为可重复读

3.使用的锁粒度为行锁,可以支持更高的并发

4.支持外键

5.配合一些热备工具可以支持在线热备份

6.在InnoDB中存在着缓冲管理,通过缓冲池,将索引和数据全部缓存起来,加快查询的速度

7.对于InnoDB类型的表,其数据的物理组织形式是聚簇表。所有的数据按照主键来组织。根据主键进行排序,数据和索引放在一块,都位于B+数的叶子节点上

ARCHIVE存储引擎

ARCHIVE存储引擎适合的场景有限,由于其支持压缩,故主要是用来做日志,流水等数据的归档,主要特点有

支持Zlib压缩,数据在插入表之前,会先被压缩 仅支持SELECT和INSERT操作,存入的数据就只能查询,不能做修改和删除; 只支持自增键上的索引,不支持其他索引

CSV存储引擎

数据中转试用,主要特点有

其数据格式为.csv格式的文本,可以直接编辑保存 导入导出比较方便,可以将某个表中的数据直接导出为csv,试用Excel办公软件打开

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/667947.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号