`
hideto
  • 浏览: 2678799 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQL性能调优:1.1 一般性语法调优

阅读更多
from http://www.beyondrails.com/blogs/42

遵守以下准则:
1,查询条件的左边应该是简单的column名,右边则应该是很容易查询的值
所有的DBMS都会把5 = column1转换为column1 = 5

2,查询条件的每个组件都有一个point count,查询速度越快,花的时间越少,points越高
操作符、操作数                           points
=                                          10
>                                           5
>=                                          5
<                                           5
<=                                          5
LIKE                                        3
<>                                          0
Literal alone                              10
Column alone                                5
Parameter alone                             5
Multioperand expression                     3
Exact numeric data type                     2
Other numeric data type                     1
Temporal data type                          1
Character data type                         0
NULL                                        0

例子
... WHERE smallint_column = 12345

points为27:
1,Column alone(smallint_column) = 5
2,Exact numeric data type(smallint_column) = 2
3,等号 = 10
4,Literal alone(12345) = 10

3,对于多个表达式条件通过优化顺序来提高速度
优化前:
SELECT * FROM Table1
  WHERE column4 < 117
    AND column4 > column5
    AND column3 = 'Smith'
    AND column1 = 5
    AND column2 = 77.3

优化后:
SELECT * FROM Table1
  WHERE column1 = 5
    AND column2 = 77.3
    AND column3 = 'Smith'
    AND column4 < 117
    AND column4 > column5


4,利用Law of Transitivity和Constant propagation的概念,使用字面量来替换column名和column表达式而不改变表达式的含义来提高速度
优化前:
SELECT * FROM Table1
  WHERE column1 = 5 AND
    NOT (column3 = 7 OR column1 = column2)

优化后:
SELECT * FROM Table1
  WHERE column1 = 5
    AND column3 <> 7
    AND column2 <> 5


5,删除那些永远不会执行的代码
SELECT * FROM Table1
  WHERE 0 = 1
    AND column1 = 'I hope we never execute this'


6,有些DBMS不会对大部分obvious-looking表达式做“折叠”,记住一点“更改代码之前先理解它的含义”
... WHERE column1 + 0

... WHERE 5 + 0.0

... WHERE column1 IN (1, 3, 3)

... CAST(1 AS INTEGER)

... WHERE 'a' || 'b'


7,如果代码包括一些显然的算术表达式,则用计算后的值来替换。
优化前:
... WHERE a - 3 = 5

优化后:
... WHERE a = 8


8,尽量避免在column里引入function
优化前:
SELECT * FROM Table1
  WHERE date_column = CURRENT_DATE
    AND amount * 5 > 100.00

优化后:
SELECT * FROM Table1
  WHERE date_column = DATE '2002-01-01'
    AND amount * 5 > 100.00


9,不要使用UPPER来做大小写不敏感的匹配,使用LOWER
优化前:
... WHERE UPPER(column1) = 'résumé'

优化后:
... WHERE LOWER(column1) = 'résumé'
分享到:
评论
3 楼 jzcsl700 2008-08-28  
对于oracle来说,好象8和9是有区别的(我也是看到网上有些人说,没有具体说明)。楼主能否介绍下啊
2 楼 hideto 2008-07-30  
为什么没有科学依据?
假设数据库是按从左到右的方式解析表达式,
AND左边如果返回false,则AND右边就不要计算了,这就是所谓的“短路”
1 楼 jzcsl700 2008-07-30  
这些没有没科学依据啊

还有
1,一般数据库按从左到右方式解析表达式(Oracle是从右到左),对AND连接的表达式优化顺序,将更小可能发生的表达式放在前面
优化前:
Java代码 
1. ... WHERE column1 = 'A' AND column2 = 'B' 

优化后:
Java代码 
1. ... WHERE column2 = 'B' AND column1 = 'A' 
2. (assuming column2 = 'B' is less likely) 


对于oracle来说应该就是这样吧?
WHERE column1 = 'A' AND column2 = 'B' 
(assuming column2 = 'B' is less likely)

相关推荐

    DB2 SQL性能调优秘笈

    ### DB2 SQL性能调优秘笈 在数据库领域,IBM DB2因其稳定性和高效性而备受推崇,尤其是在大型企业级应用中。对于DB2数据库管理员(DBA)来说,掌握有效的SQL性能调优技巧至关重要。这不仅能提升系统的响应速度,还...

    T-SQL性能调优秘笈 基于SQL Server 2012窗口函数_PDF电子书

    ### T-SQL性能调优秘笈 #### 一、T-SQL与SQL Server 2012 - **T-SQL简介**:T-SQL是Transact-SQL的简称,它是微软SQL Server数据库管理系统所使用的SQL方言,是一种用于管理SQL Server数据库的标准语言。 - **SQL ...

    DB2SQL性能调优秘笈

    资源名称:DB2 SQL性能调优秘笈资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    SQL数据库分区与性能调优:技术与应用深度解析

    本文将深入探讨SQL数据库中分区的概念、操作及其与性能调优的区别和联系。 数据库分区和性能调优是提高数据库性能的两种重要手段。分区通过分割数据来优化特定查询的性能,而性能调优则关注整个数据库系统的性能表现...

    T-SQL性能调优秘笈基于SQLServer2012窗口函数

    资源名称:T-SQL性能调优秘笈 基于SQL Server 2012窗口函数资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    DB2 SQL性能调优秘笈 . 美 Tony Andrews . PDF . ckook.pdf

    《DB2 SQL性能调优秘笈》是一本深入探讨如何优化DB2数据库系统中SQL查询性能的专业书籍。作者Tony Andrews是DB2领域的专家,他在这本书中分享了丰富的经验和实用技巧,帮助读者解决在实际工作中遇到的性能瓶颈问题。...

    T-SQL性能调优秘笈 基于SQL Server 2012窗口函数

    标题中提到的“T-SQL性能调优秘笈 基于SQL Server 2012窗口函数”表明了这本书主要讨论的是针对SQL Server 2012版本进行T-SQL性能调优的技巧和方法,特别强调了窗口函数的应用。窗口函数是SQL中用于进行数据分组和...

    SQL性能调优(全) ORACLE

    SQL性能调优(全)ORACLE SQL性能调优是提高数据库性能的重要环节。以下是该主题的知识点: 一、优化基础知识 * 性能管理:性能问题、调整的方法 * SQL优化机制 * 应用的调整 * SQL语句的处理过程 * 共享SQL区域 ...

    SQL性能调优

    "SQL性能调优" ...SQL性能调优是一项非常重要的技术,需要通过优化SQL语句的编写方式、连接方式、查询条件顺序、语法和语义、函数和表达式、常用关键字优先级等多方面来提高数据库系统的响应速度和查询效率。

    《数据库性能调优--原理与技术》

    《数据库性能调优--原理与技术》是一本深入探讨数据库性能优化的专业书籍,旨在帮助读者理解和掌握提升数据库系统效率的关键技术和方法。通过学习本书,读者能够有效地解决在实际工作中遇到的数据库性能问题,提高...

    《DB2 SQL性能调优秘笈》.((美)Tony Andrews).[PDF].&ckook;

    总的来说,《DB2 SQL性能调优秘笈》旨在帮助读者掌握DB2系统中SQL查询的优化技巧,提升数据库系统的整体效率,从而满足企业高性能、高可用性的需求。通过深入学习和实践书中的内容,读者将能够有效地解决数据库性能...

    Oracle Sql性能调优.ppt

    Oracle Sql 性能调优 Oracle SQL 性能调优是一个非常重要的课题,它涉及到 Oracle 数据库的性能优化,包括 SQL 语句优化、索引使用优化、多表关联查询操作优化、SQL 执行计划优化等。下面是Oracle SQL 性能调优的...

    Oracle 高性能SQL引擎剖析:SQL优化与调优机制详解

    Oracle数据库的性能优化直接关系到系统的运行效率,而影响数据库性能...《Oracle 高性能SQL引擎剖析:SQL优化与调优机制详解》内容丰富且深入,破解了Oracle技术的很多秘密,适合Oracle数据库管理员、应用开发人员参考。

    GaussDB(DWS)性能调优:generate_series导致的执行不下推问题优化方案

    在进行SQL应用性能调优时,理解数据库的行为和查询优化原理至关重要。DWS作为一款面向大数据分析的数据仓库服务,其性能优化通常涉及到索引策略、查询结构的优化、并行度调整等多个方面。对于`generate_series`这样...

    sybase性能和调优:锁.pdf

    ### Sybase性能与调优:锁机制详解 #### 一、引言 Sybase Adaptive Server Enterprise (ASE) 是一款高性能的关系型数据库管理系统,被广泛应用于企业级应用中。随着业务的发展和技术的进步,对数据库的性能要求...

    SQL性能调优方法特提供下载

    ### 一般性语法调优原则 #### 1. 查询条件优化 - **查询条件的顺序**:将最能过滤数据的条件放在前面可以更快地缩小搜索范围。 - **查询条件的简单性**:确保查询条件尽可能简单,避免复杂的表达式。 #### 2. 条件...

    软件性能调优:针对系统卡顿问题的诊断与解决方法

    主要包括通过员工反馈定位卡顿发生的页面或特定操作、判断卡顿现象的发生时间和触发因素(如最近有无重大变更)、评估数据库大表数据量及SQL查询时间的影响程度、分析Nginx服务器的相关配置项是否恰当以及监测运行...

    SQLSERVER性能调优

    在SQL Server性能调优的过程中,我们关注的是如何最大化数据库系统的效能,减少响应时间,提高并发处理能力,并确保数据的稳定性和安全性。以下是一些关键的知识点: 1. **查询优化**:SQL Server通过查询优化器来...

Global site tag (gtag.js) - Google Analytics