SQL优化技巧

本文以Mysql数据库为例,总结数据库优化方法。

一、数据库优化四个层面

Mysql数据库优化,可以从以下四个层面优化:硬件、系统配置、数据库表结构、sql语句及索引
优化效果:SQL语句及索引>数据库表结构>系统配置>硬件
优化成本:SQL语句及索引<数据库表结构<系统配置<硬件

二、sql语句层面优化五个原则

  1. 减少数据访问:设置合理的字段类型,启用压缩,通过索引访问等减少磁盘IO。
  2. 返回更少的数据:只返回需要的字段和数据分页处理,减少磁盘IO及网络IO。
  3. 减少交互次数批量DML(Data Manipulation Language,即增删改查)操作,函数储存等减少数据连接次数。
  4. 减少服务器CPU开销:尽量减少数据排序操作以及全表查询,减少CPU内存占用。
  5. 利用更多资源:使用表分区,增加并行操作,最大限度利用CPU资源。

可总结为以下三点:

  • 最大化利用索引
  • 尽可能避免全表扫表
  • 减少无效数据查询

三、SQL的语法顺序及执行顺序

SELECT语句,语法顺序如下:

SELECT 
DISTINCT <select_list>
FROM <left_table>
JOIN <right_table>
ON <join_condition>
WHERE <where_condition>
GROUP BY <group_by_list>
HAVING <having_condition>
ORDER BY <order_by_condition>
LIMIT <limit_number>

SELECT语句,执行顺序如下:

FROM
<表名> # 选取表,将多个表数据通过笛卡尔积变成一个表。
ON
<筛选条件> # 对笛卡尔积的虚表进行筛选
JOIN <join, left join, right join...> 
<join> # 指定join,用于添加数据到on之后的虚表中,例如left join会将左表的剩余数据添加到虚表中
WHERE
<where条件> # 对上述虚表进行筛选
GROUP BY
<分组条件> # 分组
<SUM()等聚合函数> # 用于having子句进行判断,在书写上这类聚合函数是写在having判断里面的
HAVING
<分组筛选> # 对分组后的结果进行聚合筛选
SELECT
<返回数据列表> # 返回的单列必须在group by子句中,聚合函数除外
DISTINCT
# 数据除重
ORDER BY
<排序条件> # 排序
LIMIT
<行数限制>

四、查询条件优化

  1. 对于复杂的查询,可使用中间临时表暂存数据
  2. 拆分复杂SQL为多个小SQL,避免大事务
    简单的SQL容易使用到Mysql的QUERY CACHE;减少锁表时间特别是MylSAM 存储引擎的表;可使用多核CPU。
  3. 优化 group by 语句
    默认情况下,MySQL 会对 GROUP BY 分组的所
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值