当前位置: 首页 > news >正文

数据库的SQL优化

1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

(因为在条件查询条件添加索引,会直接被检索到列,会非常的快速)

 

2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描

最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库.

例如:

 1 select id from t where num is null 

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

 1 select id from t where num = 0 

 

3.不要使用

 1 sleect * from name 

(这个绝对的全部的查询,千万不要剩力气去用)

 

4.应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。

 1 select id from name where id>5 

 

5.应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描,如:

 1 select id from t where num=10 or Name = 'admin'

可以这样查询:

 1 select id from t where num = 10 2 union all 3 select id from t where Name = 'admin 

 

6:in或者not in 也慎用 如:

 1 select id from student where id in(select id from aa) 

很多时候用 exists 代替 in 是一个好的选择:

如 : 1 select id from student where id exists(select id from aa) 

 

7:like模糊查询也会导致全盘扫描 如:

 1 select id from student where name like '%kk%' 

 

8:应避免对where语句的表达式操作 如:

 1 select id from student where id=8/2 

 

9:Update 语句,如果只更改1、2个字段,不要Update全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志。

 

10:对于多张大数据量的表JOIN,要先分页再JOIN。

 

11:select count(*) from table;这样不带任何条件的count会引起全表扫描,并且没有任何业务意义,是一定要杜绝的。

 

12:索引并不是越多越好,应正确使用索引,经常进行修改的列不适合做索引。

 

13:尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些;

 

14:尽量避免大事务操作,提高系统并发能力。

 

总结:

对于sql的优化最怕的就是避免全盘扫描,重要的事说三遍,对于sql的优化最怕的就是避免全盘扫描,对于sql的优化最怕的就是避免全盘扫描,对于sql的优化最怕的就是避免全盘扫描,杜绝***********;

转载于:https://www.cnblogs.com/GH0522/p/8127368.html

相关文章:

  • DBMS_SCHEDULER修改资源调度总结
  • mysql5.6整表数据删除binlong恢复
  • 装饰器函数
  • 传奇物品叠加设置方法
  • 使用selenium抓取淘宝的商品信息
  • JAVA-初步认识-常用对象API(集合框架-概述)
  • 九:动态规划-最大的算式
  • ssl1104-USACO 2.1城堡(foodfill)【图论,广搜】
  • C#多线程技术提高RabbitMQ消费吞吐率
  • 2017年总结的前端文章——border属性的多方位应用和实现自适应三角形
  • django之中间件
  • 推荐系统的基本概念及其在各个领域的应用
  • Linux 计划任务
  • 分布式系统事务一致性解决方案
  • Linux如何让进程在后台运行的三种方法详解
  • ComponentOne 2017 V2版本正式发布
  • Linux Process Manage
  • linux安装openssl、swoole等扩展的具体步骤
  • Markdown 语法简单说明
  • Node 版本管理
  • Python学习笔记 字符串拼接
  • SQLServer之索引简介
  • Terraform入门 - 3. 变更基础设施
  • Twitter赢在开放,三年创造奇迹
  • Web设计流程优化:网页效果图设计新思路
  • 安装python包到指定虚拟环境
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 翻译--Thinking in React
  • 微服务入门【系列视频课程】
  • 赢得Docker挑战最佳实践
  • !$boo在php中什么意思,php前戏
  • #include<初见C语言之指针(5)>
  • #控制台大学课堂点名问题_课堂随机点名
  • #微信小程序:微信小程序常见的配置传旨
  • (11)MATLAB PCA+SVM 人脸识别
  • (3)选择元素——(17)练习(Exercises)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (poj1.3.2)1791(构造法模拟)
  • (Python) SOAP Web Service (HTTP POST)
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (推荐)叮当——中文语音对话机器人
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转载)利用webkit抓取动态网页和链接
  • . Flume面试题
  • .net core开源商城系统源码,支持可视化布局小程序
  • .net refrector
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET运行机制
  • .project文件
  • @GlobalLock注解作用与原理解析
  • @NestedConfigurationProperty 注解用法
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成