常见的数据库查询性能优化

查询速度优化,主要分数据库设计层面优化、SQL 语句优化、索引优化、常见原
因与查看执行计划 explain 后具体优化,共四个小模块。

1. 数据库设计层面优化

良好的数据库设计,主要是表和字段设计合理。主要是在概念模型和逻
辑模型阶段,将抽象和字段细化经过详细推敲。满足第三范式要求为前
提,将概念抽象准确,字段类型设计合理,以下 5 个小 tips:
1 能数值类型的不要字符串
2 能日期类型的不要字符串
3 能固定长度不要用变长
4 在不同表之间的字段,可以有必要的冗余。如用户 id 和用户名
5 已知的常见查询,提前建好索引。如学号、工号类

2. SQL 语句优化

其核心是避免全表扫描、合理运用查询条件
 避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引
而进行全表扫描
 首先应考虑在 where 及 order by 涉及的列上建立索引
 避免在 where 子句中对字段进行 null 值判断,会必然导致全表扫描。
添加默认值是必要的。
 避免 or 查询,必将全表扫描(********)
 模糊查询避免前置模糊查询,即把”%”放到前面。如”select *
from student where name like %三%”
 避免使用 in 和 not in。必要情况下可以用 between…and 代替,或
者用 exists 代替。
 在条件中加入表达式或者函数操作,如”select * from student
where stdno%2==0“,亦将全表扫描。
 select 指定列,而不是都是*
 尽量使用数值作为 where 或是 order by 等的条件,其效率比字符串
类型高一个数量级。

3. 索引优化

 索引对查询并不是都有效。当索引列存在大量重复值时候,索引将不
再有效。如 country 列,往往就只有”中国“一个值。
 索引越多越好,对查询往往是对的,但对于 update 或是 insert 效率
会降低,尤其是高频的 update 或是 insert 操作。
 在 order by 条件的列上添加索引,因为索引本身是排序的,可以提
高排序效率。
 联合索引查询时,查询条件中出现联合索引第一列,或者全部,则能利
用联合索引。如果只出现第 2、第 3 列则联合索引无效。

4. 常见原因与查看执行计划 explain 后具体优化

 没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计
的缺陷)
 I/O 吞吐量小,形成了瓶颈效应。
 内存不足
 网络速度慢
 查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)
 返回了不必要的行和列
 查询语句不好,没有优化
 explain 查看执行计划使用

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值