SQL之性能优化



在实际应用中,数据库中的数据会有很多,若要从这些数据表中检索数据,就需要对系统进行优化,提高数据库系统的响应速度,下面就是日常一些查询优化的方法。

1.创建索引

索引可以提高数据库查询的速度,提高数据库的访问性能,但同时也会影响数据更新操作(例如插入、修改、删除)的速度。

  1. 如果WHERE子句中经常用到的某一列或者某几列创建索引
  2. 为数据表中经常需要执行排序操作的列创建索引
  3. 多表连接时,应该为数据表的连接列创建索引
  4. 对于需要不断更新的列,则不建议创建索引

2.优化查询语句

  1. 避免在SELECT语句中使用“*”
  2. 在使用SELECT语句时,应该在SELECT语句之后将要查询的信息一一列出来,即使要查询所有列的信息,也最好不要使用,从可读性上讲,方便用户对所要查询数据的理解。
  3. 调整WHERE子句中连接条件的顺序

    在SQL语句查询中,使用最多的就应该是WHERE子句,连接条件顺序的不同也会影响数据的查询效率。

例如:查询员工工资表中工资在1000到3000的员工记录

语句一

select empno,eName,salary
from employee
where salary>1000
and salary<3000

语句二

select empno,eName,salary
from employee
where salary<3000
and salary>1000

我们看到这两条语句,查询的结果是完全相同的,但是查询效率确实不一样的,如果员工工资都在1000元以上的话,那么我们就不言而喻了,第二条语句直接就缩小了查询范文。

注意:在使用WHERE子句进行查询时,要把限制性最高的查询条件放在最前面

3.多表联合查询

例子:

select stuid,curid ,curName,result
from t_result r,t_curriculum t
where t.curid=t.curid --应该将表与表联合放在前面
and t.stuid='123'

注意:在多表连接时,应该将表与表的结合操作放在WHERE子句的前面,后面才是过滤语句

4.避免使用OR关键字

匹配记录时,可以有两种方式,一种使用OR,另一种使用In,使用In关键字可以提高数据的查询速度

例如:

select empno,eName
from employee
where eptno=10
or eptno=15

IN语句

select empno,eName
from employee
where eptno in(10,15)--相当于创建了索引

5.避免使用<>和!=操作符

例如:查询教师工资不为3000的教师记录

这种查询不是使用索引,而是直接查询数据库中的数据,应该用下面这种形式

select empno,eName,salary
from employee
where salary<3000
or salary>3000 

注意:在实际应用中,应该尽量使用<、>等操作符而不是<>

相关子查询中使用EXISTS关键字代替IN关键字

例如查询选修课程编号为105这门课的学生信息。

6.EXISTS关键字查询

例子一:查询课程编号为105课程的信息

EXISTS语句

select s.stuid,s.stuName,s.age,s.sex
from t_student s
where exists
(select *
 from t_result t where
 s.stuid=t.stuid and t.curid='t105')

IN语句

select s.stuid,s.stuName,s.age,s.sex
from t_student s
where s.stuid in
(select *
 from t_result t where
 s.stuid=t.stuid and t.curid='t105')

原因:在执行带有IN关键字的子查询时,数据库会首先执行子查询操作,将查询结果放到一个临时表中,主查询会在子查询执行完毕后再执行,而带有EXISTS关键字的相关子查询则是先检查主查询的第一条记录,通过子查询进行匹配,这个过程会反复执行,知道子查询全部检查完毕,这样就节省了时间。

7.使用LIKE关键字

使用LIKE关键字实现模糊查询时,需要注意一下。

例如查询学生编号中含有数字100的学生信息的两种方法

方法一

select stuid,stuName,age
 from t_student
 where stuid like '%100%'

方法二

 select stuid,stuName,age
 from t_student
 where stuid like 's100%'

注意:在实际应用中也许必须要实现第一种查询方法才能满足,这里只是让大家知道这样会降低查询的效率。

8.避免使用HAVING子句

HAVING子句是用来对分组后的结果进行过滤,限制分组后的查询结果。在使用时一般需要执行排序,统计等功能,这就会消耗SQL额外工作,因此应该避免使用这些操作

使用存储过程

存储过程是经过编译的,永久保存在数据中的一组SQL语句,使用存储过程执行效率要比SQL语句执行效率高

小结:以上只是一部分SQL语句来改善数据库性能的方法,后面还会有相关的文章,敬请期待。

SQL之性能优化

时间: 2024-10-12 04:25:36

SQL之性能优化的相关文章

Sql Server 性能优化之包含列

Sql Server 性能优化之包含列 导读:数据数优化查询一直是个比较热门的话题,小生在这方面也只能算是个入门生.今 天我们就讲下数据库包含列这个一项的作用及带来的优化效果 引用下MSDN里面的一段解释: 当查询中的所有列都作为键列或非键列包含在索引中时,带有包含性非键列的索引可以显 著提高查询性能. 这样可以实现性能提升,因为查询优化器可以在索引中找到所有列值:不 访问表或聚集索引数据,从而减少磁盘 I/O 操作 上面这一段什么意思呢? 意思就是说设置好包含列,能提高查询性能,减少IO输出.

Oracle DBA数据库高级工程师(下部)SQL语言+性能优化+数据复制

套餐介绍: Oracle DBA数据库高级工程师(下部)SQL语言+性能优化+数据复制 http://edu.51cto.com/pack/view/id-973.html 描述 Oracle DBA数据库高级工程师培训课程是风哥独自研发的精品实战课程,本路线图主要是让大家快速就业.高薪就业.课程内容以实战为主(占98%),理论为辅(占2%).本课程知识全面系统实用,结合风哥十年Oracle经验,囊括企业用到的所有知识点,课程包含大量实战案例,涉及Oracle核心技术及底层研究,从零开始学习Or

SQL语句性能优化--LECCO SQL Expert

SQL语句的优化是将性能低下的SQL语句转换成目的相同的性能优异的SQL语句. 人工智能自动SQL优化就是使用人工智能技术,自动对SQL语句进行重写,从而找到性能最好的等效SQL语句. 数据库性能的优化   一个数据库系统的生命周期可以分成:设计.开发和成品三个阶段.在设计阶段进行数据库性能优化的成本最低,收益最大.在成品阶段进行数据库性能优化的成本最高,收益最小. 数据库的优化通常可以通过对网络.硬件.操作系统.数据库参数和应用程序的优化来进行.最常见的优化手段就是对硬件的升级.根据统计,对网

SQL Server 性能优化(一)——简介

原文:SQL Server 性能优化(一)--简介 一.性能优化的理由: 听起来有点多余,但是还是详细说一下: 1.节省成本:这里的成本不一定是钱,但是基本上可以变相认为是节省钱.性能上去了,本来要投入的硬件就可以减缓投入,从另外一个角度看来它就是节省了钱. 2.增加效率:对于客户来说,性能上去了,他们的工作效率也高了. 3.降低挫折感:性能底下,客户抱怨,无疑是对自己心灵上的打击. 二.性能误区: 性能误区 误区 现实 如果处理器使用率很高,那么需要添加更快的处理器 某一部分导致了性能问题 8

大话SQL Server性能优化(MSSQL高并发、性能调控、实践)

大话SQL Server性能优化(MSSQL高并发.性能调控.实践)网盘地址:https://pan.baidu.com/s/1KxdfcQD0XGD3M2ja_Y7UWQ 提取码:435v备用地址(腾讯微云):https://share.weiyun.com/5dTuZJ9 密码:xhmge4 本课程源于一家国内较知名的ERP厂商的一款产品出现性能问题后通过咨询服务解决了性能问题,然后根据自身多年技术培训.项目开发.产品研发与运维管理.软件公司内部咨询等经验,整理了在SQL Server 20

【SQL Server性能优化】运用SQL Server的全文检索来提高模糊匹配的效率

原文:[SQL Server性能优化]运用SQL Server的全文检索来提高模糊匹配的效率 今天去面试,这个公司的业务需要模糊查询数据,之前他们通过mongodb来存储数据,但他们说会有丢数据的问题,我从业务上了解到,显然对他们公司而言,丢数是绝对不能允许的. 另外,他们说之前也用过SQL Server的全文检索,但速度不够快,不如用mongodb快,当然我不太清楚他们所谓快的具体定义,比如查询只需要1秒,还是1分钟.他们的系统现在采用的是SQL Server,通过复制来实现高可用性,因为他们

SQL Server性能优化(1)使用SET函数

在一切开始之前,先看下微软的建议:在系统的整体性能优化里面, TSQL优化优先级并不是最高的. 本文包括四部分: SET STATISTICS TIME ON SET STATISTICS IO SET SHOWPLAN_ALL ON SET STATISTICS PROFILE ON SET 函数主要是为了显示sql执行时的查询计划,CPU.硬盘使用情况. 1. SET STATISTICS TIME ON:当 SET STATISTICS TIME 为 ON 时,会显示语句的时间统计信息.为

SQL SERVER性能优化综述

一个系统的性能的提高,不单单是试运行或者维护阶段的性能调优的任务,也不单单是开发阶段的事情,而是在整个软件生命周期都需要注意,进行有效工作才能达到的.所以我希望按照软件生命周期的不同阶段来总结数据库性能优化相关的注意事项. 一.分析阶段 一般来说,在系统分析阶段往往有太多需要关注的地方,系统各种功能性.可用性.可靠性.安全性需求往往吸引了我们大部分的注意力,但是,我们必须注意,性能是很重要的非功能性需求,必须根据系统的特点确定其实时性需求.响应时间的需求.硬件的配置等.最好能有各种需求的量化的指

Oracle数据库的sql语句性能优化

在应用系统开发初期,由于开发数据库数据比较少,对于查询sql语句,复杂试图的编写等体会不出sql语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要问题之一.系统优化中一个很重要的方面就是sql语句的优化.对于海量数据,劣质sql语句和优质sql语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就行,而是要写出高质量的sql语句,提高系统的可用性. Oracle的sql调优第一个复杂的主题,甚至需要长