`
hideto
  • 浏览: 2674970 次
  • 性别: 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 ...

    T-SQL性能调优秘笈 基于SQL Server 2012窗口函数 源码和示例数据库

    Chapter 01 - SQL Windowing.sql Chapter 02 - A Detailed Look at Window Functions.sql Chapter 03 - Ordered Set Functions.sql Chapter 04 - Optimization of Window Functions.sql Chapter 05 - T-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 Server2012窗口函数.rar

    1、处理常见业务问题,如总计、间隔、...3、T-SQL性能调优秘笈:基于SQL Server 2012窗口函数》基于SQLServer2012,讨论了SQL窗口、窗口函数、排序集合函数、窗口函数的优化以及利用窗口函数的T-SQL解决方案等内容。

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

    《源码T-SQL性能调优秘笈 基于SQL Server 2012窗口函数》是一本深入探讨T-SQL性能优化的专著,特别聚焦于SQL Server 2012中的窗口函数。该资源包含五章节的源代码,旨在帮助读者理解并掌握如何利用窗口函数来提升...

    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数据库管理员、应用开发人员参考。

    SQL server性能调优

    sql server性能调优 对sql的执行进行监控,用来做效率分析。可以用来做项目优化和SQL功能调优使用。

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

    由于提供的文件信息中,大部分内容是关于PDF电子书资料下载的广告信息,并非关于“T-SQL性能调优秘笈 基于SQL Server 2012窗口函数”的内容,因此在不违反您的要求的前提下,这部分广告信息不会被转化为知识点。...

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

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

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

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

    SQL Server性能调优实战

    SQL Server性能调优实战 带索引书签目录............

    SQL 性能调优试验手册.pdf

    ### SQL性能调优基础 SQL性能调优是一个系统化的过程,旨在提升数据库的响应时间和处理能力。性能调优包括识别瓶颈、分析问题、实施解决方案以及监控改进的效果。性能调优的本质涉及到数据库服务器的配置优化、查询...

Global site tag (gtag.js) - Google Analytics