MySQL优化之概述及字段设计(一)

MySQL优化之概述及字段设计(一)

在日常开发中,MySQL的优化是必不可少的,下面就来简单的介绍一下为什么要优化,怎么去优化

优化概述

为什么要优化:

  1. 当我们的应用吞吐量到达了数据库的处理速度之上
  2. 数据库随着应用逐渐增多,处理压力逐渐增大
  3. 存放在磁盘上的数据库,相比于内存中的数据 读写要慢

如何优化:

  1. 表,字段设计,结合业务考量更优的存储和计算
  2. 数据库本身提供的优化功能,比如索引等
  3. 主动复制,读写分离,分区分表,负载均衡等
  4. SQL语句的优化,区分SQL中的关键用法,比如join,left join,right join等

字段设计

一、精度要求
1、DECIMAL
DECIMAL数据类型用于在数据库中存储精确的数值。我们经常将DECIMAL数据类型用于保留准确精确度的列,例如会计系统中的货币数据。

创建方式为:column_name DECIMAL(P,D);
P 有效数字的精度 范围1-65
D 小数点后面的位数 0-30

与INT数据类型一样,DECIMAL类型也具有UNSIGNED和ZEROFILL属性。 如果使用UNSIGNED属性,则DECIMAL UNSIGNED的列将不接受负值。

2、小数转整数
FLOOR(X)函数
该函数的作用是将小数的小数部分去除,只留下整数部分,并且不进行四舍五入。
例:select FLOOR(5.5) 输出为5

ROUND(X,D)函数和TRANCATE(X,D)函数
两个函数都可以用来对小数保留指定小数位数,其中第二个参数D用来指定要保留到第几位。差别是前者会进行四舍五入,而后者不会。
例:select ROUND(5.5,1) select TRANCATE(5.5,1) 前者输出 5.5 后者输出 5.6

二、尽量使用整数表示字符串
IP 存储
当前很多应用都适用字符串char(15)来存储IP地址(占用16个字节),利用inet_aton()和inet_ntoa()函数,来存储IP地址效率很高,适用unsigned int 就可以满足需求,不需要使用bigint,只需要4个字节,节省存储空间,同时效率也高很多。

函数名:INET_ATON(EXPR)
函数功能:给出一个作为字符串的网络地址,返回一个代表地址数值的整数。’

函数名:INET_NTOA(EXPR)
函数功能:给定一个数字网络地址,返回作为字符串的该地址的电地址表示。

三、尽可能使用 not null
空值不占空间,null 占用空间
字段属性为not null 时,插入null 会报错,插入 ‘’ 则不会
NULL 其实并不是空值,而是要占用空间,所以mysql在进行比较的时候,NULL 会参与字段比较,所以对效率有一部分影响。
而且B树索引时不会存储NULL值的,所以如果索引的字段可以为NULL,索引的效率会下降很多。

四、定长和非定长的选择
1、较长的数字可以选择DECIMAL
2、char 为定长,超出长度会被截取,varchar 为非定长,varchar 对长度的保存占用数据空间

五、数据库三范式
第一范式:字段的原子性(关系性数据库有列的概念)
第二范式:消除对主键的部分依赖,使用一个与业务无关的字段作为主键
第三范式:消除对主键的传递依赖

Guess you like

Origin blog.csdn.net/SKY_PLA/article/details/100916634