SQL之性能优化
在实际应用中。数据库中的数据会有非常多。若要从这些数据表中检索数据,就须要对系统进行优化,提高数据库系统的响应速度,以下就是日常一些查询优化的方法。
1.创建索引
索引能够提高数据库查询的速度,提高数据库的訪问性能,但同一时候也会影响数据更新操作(比如插入、改动、删除)的速度。
假设WHERE子句中经经常使用到的某一列或者某几列创建索引
为数据表中常常须要运行排序操作的列创建索引
多表连接时。应该为数据表的连接列创建索引
对于须要不断更新的列,则不建议创建索引
2.优化查询语句
避免在SELECT语句中使用“*”
在使用SELECT语句时,应该在SELECT语句之后将要查询的信息一一列出来,即使要查询全部列的信息。也最好不要使用,从可读性上讲,方便用户对所要查询数据的理解。
调整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.避免使用ORkeyword
匹配记录时。能够有两种方式,一种使用OR,还有一种使用In,使用Inkeyword能够提高数据的查询速度
比如:
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
注意:在实际应用中。应该尽量使用<、>等操作符而不是<>
相关子查询中使用EXISTSkeyword取代INkeyword
比如查询选修课程编号为105这门课的学生信息。
6.EXISTSkeyword查询
样例一:查询课程编号为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')
原因:在运行带有INkeyword的子查询时。数据库会首先运行子查询操作,将查询结果放到一个暂时表中,主查询会在子查询运行完成后再运行。而带有EXISTSkeyword的相关子查询则是先检查主查询的第一条记录,通过子查询进行匹配。这个过程会重复运行,知道子查询所有检查完成。这样就节省了时间。
7.使用LIKEkeyword
使用LIKEkeyword实现模糊查询时。须要注意一下。
比如查询学生编号中含有数字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之性能优化的更多相关文章
- SQL Server 性能优化(一)——简介
原文:SQL Server 性能优化(一)--简介 一.性能优化的理由: 听起来有点多余,但是还是详细说一下: 1.节省成本:这里的成本不一定是钱,但是基本上可以变相认为是节省钱.性能上去了,本来要投 ...
- SQL Server 性能优化之——系统化方法提高性能
SQL Server 性能优化之——系统化方法提高性能 阅读导航 1. 概述 2. 规范逻辑数据库设计 3. 使用高效索引设计 4. 使用高效的查询设计 5. 使用技术分析低性能 6. 总结 1. 概 ...
- SQL Server性能优化与管理的艺术 附件下载地址
首先感谢读者们对鄙人的支持,购买了<SQL Server性能优化与管理的艺术>,由于之前出版社的一些疏忽,附件没有上传成功,再次本人深表歉意. 请需要下载附件的读者从下面链接下载,谢谢: ...
- Mybatis动态sql及性能优化-3
内容简介 1.回顾 2.动态sql 3.性能优化 懒加载机制 一级缓存 二级缓存 一.回顾 1.config文件常用标签 properties标签:引入外部properties文件资源. settin ...
- SQL Server性能优化(6)查询语句建议
1. 如果对数据不是工业级的访问(允许脏读),在select里添加 with(nolock) ID FROM Measure_heat WITH (nolock) 2. 限制结果集的数据量,如使用TO ...
- SQL SERVER性能优化综述
SQL SERVER性能优化综述 一个系统的性能的提高,不单单是试运行或者维护阶段的性能调优的任务,也不单单是开发阶段的事情,而是在整个软件生命周期都需要注意,进行有效工作才能达到的.所以我希望按照软 ...
- SQL Server 性能优化之RML Utilities:快速入门(Quick Start)(1)
SQL Server 性能优化之RML Utilities:快速入门(Quick Start)(1) 安装Quick Start工具 RML(Replay Markup Language)是MS ...
- Oracle SQL语句性能优化方法大全
Oracle SQL语句性能优化方法大全 下面列举一些工作中常常会碰到的Oracle的SQL语句优化方法: 1.SQL语句尽量用大写的: 因为oracle总是先解析SQL语句,把小写的字母转换成大写的 ...
- 【SQL Server性能优化】删除大量数据的方法比较
原文:[SQL Server性能优化]删除大量数据的方法比较 如果你要删除表中的大量数据,这个大量一般是指删除大于10%的记录,那么如何删除,效率才会比较高呢? 而如何删除才会对系统的影响相对较小呢? ...
- 【SQL Server性能优化】运用SQL Server的全文检索来提高模糊匹配的效率
原文:[SQL Server性能优化]运用SQL Server的全文检索来提高模糊匹配的效率 今天去面试,这个公司的业务需要模糊查询数据,之前他们通过mongodb来存储数据,但他们说会有丢数据的问题 ...
随机推荐
- (萌O(∩_∩)O)哈希知识点小结
噶呜~先来了解一下什么是哈希吧? 当我们要在一堆东西中找到想要的那一个东西,我们常常通过比较来找,理想的情况是不经过任何比较,一次就能找到,怎么才能做到这样呢?那就在记录的储存位置和他的关键字之间建立 ...
- hash应用以及vector的使用简介:POJ 3349 Snowflake Snow Snowflakes
今天学的hash.说实话还没怎么搞懂,明天有时间把知识点总结写了,今天就小小的写个结题报告吧! 题意: 在n (n<100000)个雪花中判断是否存在两片完全相同的雪花,每片雪花有6个角,每个角 ...
- Mac OS提示# 14:自己定义文件图标
本教程的其余部分再一次错过了方法,和一些使用提示,做一些额外的,我们希望对大家有帮助. 自己定义图标 对于Mac OSX用户来说,Dashboard,Dock栏,壁纸以及各种键盘触摸板的快 ...
- [Android学习笔记]Unable to execute dex Multiple dex files define:xxxx 问题
dex filse: Dalvik Execute Files , 即Android虚拟机可执行程序 从字面意思理解是你一个应用中,出现了多个Dex文件定义. 以下情况会出现此错误: 1.你项目中可能 ...
- HUST 1569(Burnside定理+容斥+数位dp+矩阵快速幂)
传送门:Gift 题意:由n(n<=1e9)个珍珠构成的项链,珍珠包含幸运数字(有且仅由4或7组成),取区间[L,R]内的数字,相邻的数字不能相同,且旋转得到的相同的数列为一种,为最终能构成多少 ...
- Installing SSL on CentOS | My Virtual Time Capsule
Installing SSL on CentOS | My Virtual Time Capsule Installing SSL on CentOS Extracted from the Sourc ...
- BZOJ 2809 APIO2012 dispatching Treap+启示式合并 / 可并堆
题目大意:给定一棵树,选定一棵子树中的一些点,薪水和不能超过m,求点的数量*子树根节点的领导能力的最大值 考虑对于每一个节点,我们维护一种数据结构,在当中贪心寻找薪金小的雇佣. 每一个节点暴力重建一定 ...
- ADO.NET之1-数据库连接---ShinePans
ADO.NET技术主要包含Connection,Command,DataReader,DataAdapter,DateSet,DataTable等六种对象 1).Connection 对象的主要功能是 ...
- oracle 之 内存—鞭辟近里(三)
oracle 之 内存—鞭辟近里(三) 今天是2013-07-08,今天晚上突然接到一个电话,我的外甥问我的qq是多少,我感觉很吃惊,他长大了.在他现在这个年龄就开始接触网络,我难免有少许担心,希望他 ...
- (step 8.2.13)hdu 1524(A Chess Game)
题目大意 : 在一个 有向无环图顶点上面有几个棋子, 2个人轮流操作, 每次操作就是找一个棋子往它能够移 动的地方移动一格, 不能操作的人输. 输入第一行 为一个 N , 表示有 N 个顶点 0 -& ...