优化Select 语句的原则

优化Select 语句的原则

  -摘抄《SQL Server 2005 性能监测与优化

Select 语句是数据库应用系统中最常用的语句之一,Select 语句设计的好坏直接影响到应用程序的工作性能。

在设计Select语句时,应该注意以下几种影响查询效率的情况:

1、  没有创建索引,或者没有正确地使用索引。这是最有可能影响数据库查询的原因之一。创建索引是优化数据库查询效率的重要手段。

2、  存在死锁的情况,从而导致Select语句挂起,无法返回结果集。

3、  返回不必要的列,很多程序员喜欢使用Select * from TableName 来查询表可视图中的数据,* 代表表或视图中所有字段,建议用户在使用Select语句时,只返回必要的列。浪费更多的系统资源,从而影响查询效率。

4、  在Select语句中使用Where字句,设置查询条件,只返回必要的记录。

5、  在Select语句中使用Top 关键字,限制返回的记录数量。

6、  如果在Where字句中使用Like谓词进行模糊查询,则要注意通配符的使用方法。

7、  慎用Union关键字,因为它会影响查询的效率。

8、  慎用Distinct关键字,因为在结果集中返回重复的记录并不会影响查询的效率。相反,过滤掉重复的记录会浪费查询的时间和系统资源。因此,除非必须如此,不要使用Distinct关键字。

9、  如果需要经常对表中的数据进行统计,可以在表中增加一个统计字段,每次表中数据发生变化时,动态更新统计字段。这样,在查询统计结果时,就不需要临时对表中的数据统计计算了。

10、              如果需要多次对一个数据量非常大的表中的一部分数据进行查询操作,可以将这部分数据保存到临时表中,然后对临时表进行查询操作。如果需要,可以在临时表上创建索引。

11、              在Where字句中,有时使用Between关键字比使用In关键字要快,因为In关键字对其后面的集合中的每个元素进行比较操作。如果必须使用In关键字,则可将频繁使用的值放在集合的前面,从而减少比较的次数。

12、              尽量少使用视图,特别是嵌套视图,可以直接从表中获取数据。在开发应用程序时,有时程序员为了方便,设计一个包含很多字段的大视图,无论需要什么数据,都可以通过查询此视图获取到。实际上,最好从表直接获取数据,以避免查询大视图而造成的系统开销。建议使用存储过程代替视图,从而提高执行的效率。

13、              如果不需对结果集进行排序,则不要使用Order By字句,因为排序操作会占用系统资源。

14、              不要在Where字句中“=”的左侧使用函数和表达式,因为系统将无法应用函数或表达式中的索引。

15、              当判断表中包含记录时,使用Exists关键字,而不要使用Count统计表中所有的记录数量。

你的数据库应用系统违反几条建议?欢迎提出更多优化建议!

时间: 2024-12-18 22:19:49

优化Select 语句的原则的相关文章

8.2.1-优化SELECT语句

8.2.1.优化 SELECT 语句 由SELECT 语句组成的查询,在数据中执行所有的查询.对这类语句的调优排在首位,无论是调优动态web网页的二级响应时间,还是减少生成巨大隔夜报告的时间. 而且,对SELECT语句调优的技术同样适用 CREATE TABLE...AS SELECT, INSERT INTO...SELECT,DELETE 中带有where的语句.这些语句还有其他的性能开销,因为这些操作在读操作的时候也进行写操作. MySQL Cluster 支持join pushdown优

Oracle数据库--基本的select语句

1. 基本select语句 1)查看当前用户    show user   USER 为 "SCOTT"   2)查询当前用户下的表    SQL> select * from tab; TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- DEPT TABLE EMP TABLE BONUS TABLE SALGRADE TABLE 3)查看员工表的结构   SQL> desc

ORACLE常用SQL优化hint语句

在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO=’SCOTT’; 2. /*+FIRST_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化.

数据库调优教程(十二) 优化sql语句

五.           优化Sql语句 上一章讲了如何设计一张好的表,一张好的表自然需要好的sql语句去操作它.本章就来聊聊如何优化sql语句. 1.      Sql语句优化原则 优化需要优化的Query 定位优化对象性能瓶颈 从Explain入手 尽可能在索引中完成排序 只取自己需要的Column 尽可能避免复杂的join和子查询 2.     优化limit select * from test1 order by id limit 99999,10 原语句虽然使用了id索引,但是相当于

应用索引技术优化SQL 语句一

一.前言 很多数据库系统性能不理想是因为系统没有经过整体优化,存在大量性能低下的SQL 语句.这类SQL语句性能不好的首要原因是缺乏高效的索引.没有索引除了导致语句本身运行速度慢外,更是导致大量的磁盘读写操作,使得整个系统性能都受之影响而变差.解决这类系统的首要办法是优化这些没有索引或索引不够好的SQL语句. 本文讨论和索引相关的有关内容,以及通过分析语句的执行计划来讲述如何应用索引技术来优化SQL 语句.通过分析执行计划,读者可以检查索引是否有用,以及如何创建高效的索引.本文对数据库管理人员以

从Select语句看Oracle查询原理(了解Oracle的查询机制)

第一步:客户端把语句发给服务器端执行 当我们在客户端执行select语句时,客户端会把这条SQL语句发送给服务器端,让服务器端的进程来处理这语句.也就是说,Oracle客户端是不会做任何的操作,他的主要任务就是把客户端产生的一些SQL语句发送给服务器端.虽然在客户端也有一个数据库进程,但是,这个进程的作用跟服务器上的进程作用是不相同的.服务器上的数据库进程才会对SQL语句进行相关的处理.不过,有个问题需要说明,就是客户端的进程跟服务器的进程是一一对应的.也就是说,在客户端连接上服务器后,在客户端

mysql优化sql语句

mysql优化sql语句 常见误区 www.2cto.com 误区1: count(1)和count(primary_key) 优于 count(*) 很多人为了统计记录条数,就使用 count(1) 和 count(primary_key) 而不是 count(*) ,他们认为这样性能更好, 其实这是一个误区.对于有些场景,这样做可能性能会更差,应为数据库对 count(*) 计数操作做了一些特别的优化. 误区2: count(column) 和 count(*) 是一样的 这个误区甚至在很多

MySQL: select 语句

1. order by (排序) 通常使用一个字段作为参考标准,进行排序. 语法:order by [字段] asc|desc;(升序.降序) tip : 校对规则 决定 排序关系. 允许多字段排序(先按第一个字段排序,当出现不能区分的时候,按第二个字段进行排序,依此类推). [举个栗子] 对于下表,输入select * from tb_name; 时,会按照输入顺序依次显示表中的数据: 当需要对表中数据按照字段 stu_score 进行降序排列时,在输入语句后加上order by stu_sc

优化数据库语句的几个简单技巧

1. 索引 a. SQL语句的 where 和 join 部分中用到的字段,都应该加上索引. b. 尽量用加索引的字段进行直接判断,不要对加索引的字段进行转化后再判断,因为这样会导致加的索引无效,达不到优化的效果. e.g. 查询A表中所有2016年的数据 CREATE INDEX A_idx ON A (date_column); SELECT text, date_column FROM A WHERE TO_CHAR(date_column, 'YYYY') = '2016'; 上述的索引