2021-11-12

SQL优化的方式

在公司没事做,实习就先学学SQL优化吧。

  • 先说为什么要有优化SQL。
  1. 众所周知,对于一个关系型数据库来说,我们以MySQL为例,每次查询都要经历一个IO流,去磁盘读取持久化的数据。对于SQL来说,一个高效的SQL语句,能够以少量的资源去获取所需要的数据。因此,对于SQL的优化,成了开发中的必须任务,当然,在开发中并不一定会知道SQL语句的效率,因为在应用实际上线以后,随着时间的增加,某些数据库的表数据量会随之增加。
  2. 对于经常访问的表,应该对其进行优化。且在那些表中,经常会有不怎么需要的字段的存在。因此,可以在查询阶段就过滤掉那些不需要的字段,对于经常使用到的字段,可以选择给其加上索引,以空间换取时间,优化响应时间。
  • 怎么分析数据库哪些字段需要优化呢?从两方面来说。
  1. 根据用户需求进行需求分析,在设计数据库时就预先判断哪些字段那些表可能需要大量使用,针对其进行预先优化。
  2. 在产品上线以后使用慢查询,分析得到的慢查询日志,找出那些在设计阶段未被优化的SQL,针对性的优化。
  • 优化的方式。
  1. 优化数据库结构。
  • 将不经常使用的字段独立存储。
    什么叫做将不经常使用的字段拆分储存?
    以个人信息为例。个人信息里边有些属性几乎是从未被用过。对于某些不强制要求填入相应的个人信息,用户几乎难以使用到。比如家庭关系,社会关系,所属单位等。这是可以新建一张扩展信息表,用Base表的主键作为扩展表的外键,重新储存。(当然,这其实是违背数据库三范式第二条的,但是三范式也说了,根据实际情况为准,三范式未必正确。)比如我们在主页时,需要拿到后台用户数据的基本信息,但是并不需要它的扩展信息,如果每次查询个人信息时都多查找了扩展数据,就有些浪费资源了。且当表的数据量很大时,就会影响查询速率。
  • 在满足需求的情况下,尽可能的设计字段占存储空间小。
    实际上,数据量在非常大的时候,如果定义的字段不符合规范的话,就会造成极大的浪费,以邮政编码来说,中国的邮政编码是6位数的,可以定义为char(6)或者数字型(6),但是如果涉及不规范的话,例如char(50),可以看到,他所需的空间是实际需求的8.3334倍,可能在数据量小时并没什么影响,假设我们有10亿条数据,这个差距就被放大了10亿倍,而这需要更多的存储服务器来做支撑,导致成本上升。当然,实际情况会更复杂许多。因此,设计阶段做评审是非常需要的。
  • 字段设计默认值时尽量不要为空,减少判NULL操作。where语句判空会导致数据库引擎使用全表查询而不是索引。
  • 分库分表。
  1. 优化SQL语句。
  2. 优化索引结构。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值