0 0

怎么优化sql语句呀?5

     如题。。。
2010年1月18日 22:21

4个答案 按时间排序 按投票排序

0 0

采纳的答案



1、查询时不返回不需要的行、列
      业务代码要根据实际情况尽量减少对表的访问行数,最小化结果集,在查询时,不要过多地使用通配符如:select * from table1语句,要用到几列就选择几列,如:select col1,col2 from table1;在可能的情况下尽量限制结果集行数如:select top 100 col1,col2,col3 from talbe2,因为某些情况下用户是不需要那么多的数据的。

2、合理使用EXISTS, NOT EXISTS字句
     如下所示:

     SELECT SUM(T1.C1) FROM T1 WHERE ((SELECT COUNT(*) FROM T2 WHERE T2.C2=T1.C2)>0)

     SELECT SUM(T1.C1) FROM T1 WHERE EXISTS(SELECT * FROM T2 WHERE T2.C2=T1.C2)



     两种产生相同的结果,但是后者的效率显然要高过于前者。银行后者不会产生大量锁定的表扫描或是索引扫描。



     经常需要些一个T_SQLL语句比较一个父结果集和子结果集,从而找到是否存在在父结果集中有而在子结果集中乜嘢的记录,如:

     SELECT _a.hdr_key FROM hdr_tb1 a               -----------tb1 a 表示tb1用别名a代替

     WHERE NOT EXISTS (SELECT * FROM dt1_tb1 b WHERE a.hdr_key = b.hdr_key)



     SELECT _a.hdr_key FROM hdr_tb1 a               -----------tb1 a 表示tb1用别名a代替

     LEFT JION dt1_tb1 b ON  a.hdr_key = b.hdr_key WHERE b.hdr_key IS NULL



     SELECT hdr_key  FROM hdr_tb1

     WHERE hdr_key NOT IN (SELECT hdr_key FROM dt1_tb1)



     三种写法都可以得到同样的结果集,但是效率是依次降低

3、充分利用连接条件
     在某种情况下,两个表之间可能不止一个的连接条件,这时在where 字句中将谅解条件完整的写上,有可能大大提高查询速度。

     例:

    a)、SELECT SUM(A.AMOUNT) FROM ACCOUNT A left jion CARD B on A.CARD_NO = B.CARD_NO



    b)、SELECT SUM(A.AMOUNT) FROM ACCOUNT A left jion CARD B on A.CARD_NO = B.CARD_NO AND A.ACCOUNT_NO = B.ACCOUNT_NO

     第二句将比第一句执行快得多。

4、WHERE 字句中关系运算符的选择
      a)、在关系运算中,尽量使用=,尽量不要使用<>。

      b)、WHERE字句中尽量不要使用NOT运算符,如:NOT IN ,NOT EXISTS, NOT>、NOT<等等NOT运算符一般可以去除。如NOT SALARY >10000K可以改为:salary<=100,如避免使用NOT IN,可以使用 left outer jion代替它。

      c)、where 字句中条件表达式间逻辑关系为AND时,将条件为假的概率高的放在前面,概率相同、条件计算简单的放在前面。

      d)、尽可能不要用Order by字句。使用Order by时,尽量减少列数、尽量减少排序数据行数、排序字段尽量是数字型(尽量不要是字符型)。GROUP BY、 SELECT DITINCT、UNION等字句,也经常导致Order运算。

      e)、不要使用Select count(*)方式来判断记录是否存在,建议使用Select top 1 from table1 where ……。

      f)、不要使用Group by而没有聚合列。

     g)、避免Select 语句的Where 字句条件用于假。如:where 1=0;

    h)、如果有多表连接时,应该有主从表之分,并尽量从一个表读取数,如select a.col1,a.col2 from a jion b on a.col3=b.col4 where b.col5=’a’.

     i)、在where 字句中,如果有多个过滤条件,应将所有列或过滤记录数量最多的条件应该放在前面。



二、使用Truncate清空表

      Truncate会将表中记录全部清空,而不能有选择性的删除指定记录。而DELETE可以指定删除的记录。由于Truncate操作在TransactionLog中只记录被Truncate的页号,而DELETE需要记载被删除记录的详细内容,因此Truncate会比DELETE更迅速。对大数据表使用Truncate,效果更加明显。Truncate Table只会删除表中记录。而不会对表的索引和结构造成影响。

三、Union和Union all

      Union将两个结果集合并后,会消除重复记录,而Union all不会消除重复记录,而是直接将两个结果集直接合并。明确得知两个结果集中没有重复记录或者重复记录不影响使用,建议使用Union all 代替Union。因为Union在消除重复记录的过程中需要进行排序过滤操作,对大结果集这种排序操作会非常影响性能。下面是Union 和Union all的简单性能比较:

---------------Union

select * from table1 where code=’01’

Union

select * from table1 where code=’02’



---------------Union all

select * from table1 where code=’01’

union all

select * from talbe1 where code=’02’



2010年1月18日 22:23
0 0
0 0

自己去google 百度去搜索吧   好多好多。

2010年1月18日 22:38
0 0

参考些资料
http://news.csdn.net/n/20061207/98991.html
http://database.51cto.com/art/200904/118526.htm
http://www.iwms.net/n1125c18.aspx

2010年1月18日 22:37

相关推荐

    SQL语句最优化

    SQL语句最优化SQL语句最优化SQL语句最优化SQL语句最优化

    SQL优化 SQL优化软件 SQL优化工具

    3. **建议与改写**:自动提供优化建议,包括修改SQL语句结构、创建或调整索引、优化连接方式等,有时甚至可以直接改写SQL语句以提高性能。 4. **历史记录与报告**:记录SQL语句的执行历史,生成性能报告,便于跟踪...

    sql语句万能生成器,sql语句,sql语句生成

    SQL语句是数据库操作的核心,它用于查询、插入、更新和删除数据,是任何数据库管理系统中的基础工具。在IT行业中,编写SQL语句是一项必备技能,但手动编写和调试SQL语句可能会耗费大量时间和精力,尤其在处理复杂...

    Oracle Sql语句转换成Mysql Sql语句

    本项目提供了一个Java源码工具,能够帮助用户便捷地将Oracle SQL语句转换为MySQL SQL语句。 Oracle SQL与MySQL SQL的主要差异在于以下几个方面: 1. **数据类型**:Oracle支持的数据类型如NUMBER、LONG、RAW等在...

    Effective MySQL之SQL语句最优化.pdf

    尽管如此,我将基于标题和描述中提供的关键词“Effective MySQL之SQL语句最优化”来构建知识点。 1. SQL语句最优化的概念:在数据库管理中,对SQL语句进行优化是提高数据库性能的关键环节。最优化的SQL语句能够在...

    SQLSserver2008 上

    第一章 SQL Server基础 ? ? 1、SQL 2008视频教程—SQL数据库连接 ? 2、SQL 2008视频教程-系统数据库 ? 3、SQL 2008视频教程-数据库创建 ? 4、SQL 2008视频教程-数据库创建2 ... 17、利用T-SQL语句修改视图

    通过分析SQL语句的执行计划优化SQL.doc

    《通过分析SQL语句的执行计划优化SQL》 在数据库管理中,SQL语句的优化是提升系统性能的关键环节。本文主要探讨了如何通过分析SQL语句的执行计划来优化查询性能,涉及到共享SQL语句、ROWID、Recursive SQL、Row ...

    sql语句说明sql语句说明sql语句说明.zip

    sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明...

    PB脚本中SQL语句写法与SQL中语句写法对照

    PB脚本中SQL语句写法与SQL中语句写法对照 PB脚本中SQL语句写法与SQL中语句写法对照是非常重要的知识点,因为PB脚本和SQL语言在写法和应用中有所不同。本文将对PB脚本中SQL语句写法和SQL中语句写法进行对比和分析。 ...

    sql语句中用问号代替参数

    在SQL语句中,使用问号(`?`)作为参数占位符是一种常见的做法,尤其是在编程语言如Java中与数据库交互时。这种方式被称为预编译语句或参数化查询,它具有重要的安全性和性能优势。 ### SQL参数化查询的概念 参数化...

    优化SQl语句的十个重要步骤:

    SQL语句优化是数据库管理中的关键任务,它对系统性能有着显著影响。以下是对"优化SQL语句的十个重要步骤"的详细说明: 1. **确保TIMED_STATISTICS设置为TRUE**:TIMED_STATISTICS参数控制数据库是否收集执行统计...

    Effective MySQL之SQL语句最优化(高清)

    《Effective MySQL之SQL语句最优化》提供了很多可以用于改进数据库和应用程序性能的最佳实践技巧,并对这些技巧做了详细的解释。《Effective MySQL之SQL语句最优化》希望能够通过一步步详细介绍SQL优化的方法,帮助...

    Java打印漂亮的SQL语句(被格式化的SQL语句)

    在Java编程中,调试SQL语句是开发过程中的常见任务,尤其当面对复杂且冗长的查询时。为了提高效率并使SQL语句更易于理解和分析,格式化SQL语句显得尤为重要。标题提及的"Java打印漂亮的SQL语句(被格式化的SQL语句)...

    最新整理的常用sql语句及优化大全

    本资源“最新整理的常用sql语句及优化大全”涵盖了SQL的基础使用和性能优化,对于数据库管理员、开发人员或是学习者来说,都是极具价值的学习资料。 一、SQL常用语句 1. **数据查询**:`SELECT`语句是SQL中最基本...

    新一代智能SQL语句优化技术

    新一代智能SQL语句优化技术是数据库管理领域的重要进步,它主要针对的是提升数据库应用程序的性能。SQL(结构化查询语言)作为访问和更新数据的主要工具,其性能优化对于整体系统效率有着重大影响。通常,SQL语句...

    32丨MySQL调优之SQL语句:如何写出高性能SQL语句?.html

    32丨MySQL调优之SQL语句:如何写出高性能SQL语句?.html

    SQLServer动态SQL语句的用法

    SQL Server 动态 SQL 语句的用法 SQL Server 中的动态 SQL 语句是一种灵活的查询方式,它可以根据不同的情况生成不同的 SQL 语句。动态 SQL 语句可以用来实现复杂的业务逻辑,提高查询效率和灵活性。 普通 SQL ...

    优化SQL语句——利用Quest Central for SQL Server来自动化你的工作.pdf

    《优化SQL语句——利用Quest Central for SQL Server来自动化你的工作》 在数据库管理领域,SQL语句的优化是提升系统性能的关键环节。为了提高生产力,减少用户因错误导致的问题,我们常常需要对SQL语句进行调整和...

Global site tag (gtag.js) - Google Analytics