根据我们的经验(由很多业界专家证明),在 SQL Server 上取得的性能提高有 80% 来自对 SQL
编码的改进,而不是来自于对于配置或系统性能的调整。”
—凯文 克莱恩等,Transact-SQL Programming 作者
“经验表明 80%-90% 的性能调优是在应用级做的,而不是在数据库级”
—托马斯 白特,Expert One on One: Oracle
作者
可见sql语句对于数据库性能的重要性。
各种操作符的效率排序:(由高到低)
=
>
>=
<
<=
LIKE
<>
LIKE 和 <>都会导致全表搜索。效率最低。
各种操作符的效率排序:(由高到低)
仅有常量字符 (例如 where 1=1 )
仅有列名
仅有参数
多操作数表达式
精确数值类型
其他数值类型
日期类型
字符类型
NULL
由此可见最有效率的条件查询查询是 smallInt_column = 1;
1
WHERE column1 < column2
AND column2 = column3
AND column1 = 5
2
... WHERE 5 < column2
AND column2 = column3
AND column1 = 5
很显然表达式2和表达式1是同样的功能但是效率会高
不过经过研究证明 将常量放在表达式的右边效率要比放在左边高 例如 column > 5 就比 5 > column 效率高。
针对操作符的调优
比如我们有两个条件 用and连接 但是如果把概率大条件放在前面的话就会导致第二个and条件被执行的概率大好多,这样就可能会导致会做多次无用的查询,所以相对于and条件,应该把概率小条件的放在前面执行。(ps: oracle数据库是从由到左读搜索条件的),而对于or条件,应该把概率大的条件放在最前面,这样就第二个条件就会更少次数的执行。
尽量减少AND和OR的出现次数,多用一个连接条件就等于可能多做一次查询,优先用AND,OR条件可能将会导致全表搜索。
<> LIKE NOT 等操作符如果可以被别的操作符代替的话最好就不要用。因为用他们进行查询的时候不会用索引,而且可能导致全部查询。
例如:where column <> 3 可以 被 Where colunm >3 OR colunm < 3;
比较复杂的情况,根据集合的摩根定理:
NOT( A AND B) = (NOT A) OR (NOT B) 和 NOT(A OR B) = (NOT A) AND (NOT B)
IN 比 多个OR要快。
当 IN 操作符,是一系列密集的整型数字时,最好是查找哪些值不符合条件,而不是查找哪些值符合条件,因此,如下的查询条件就应该进行如下的转换:
UNION 用来合并两个结果集但是或过滤重复的值,UNION ALL则不会过滤重复的值。
查询 1:
SELECT * FROM Table1
WHERE column1 = 5
UNION
SELECT * FROM Table1
WHERE column2 = 5
|
查询 2:
SELECT DISTINCT * FROM Table1
WHERE column1 = 5
OR column2 = 5
|
在上面的例子中,column1 和 column2 都没有索引。如果查询 2 总是比查询 1 执行的快的话,那么就可以建议总是将查询 1 转换成查询 2,但是有一种情况,这样做在一些数据库系统中可能会带来性能变差,这是由于两个优化缺陷所造成的。
第一个优化缺陷就是很多优化器只优化一个 SELECT 语句中一个 WHERE 语句,所以查询 1 的两个 SELECT 语句都被执行。首先优化器根据查询条件 column1 = 5 为真来查找所有符合条件的所有行,然后据查询条件 column2 = 5 为真来查找所有符合条件的所有行,即两次表扫描,因此,如果 column1 = 5 没有索引的话,查询 1 将需要 2 倍于查询 2 所需的时间。如果 column1 = 5 有索引的话,仍然需要二次扫描,但是只有在某些数据库系统存在一个不常见的优化缺陷却将第一个优化缺陷给弥补了。当一些优化器发现查询中存在 OR 操作符时,就不使用索引查询,所以在这种情况下,并且只有在这种情况下,UNION 才比 OR 性能更高。这种情况很少见,所以仍然建议大家当待查询的列没有索引时使用 OR 来代替 UNION。
分享到:
相关推荐
Oracle 11g的SQL优化可以涵盖多个层面,从最初的SQL编写到查询执行计划的选择,再到物理和逻辑结构的调整。以下是一些关键知识点: 1. SQL编写准则:在编写SQL查询时,开发者应当尽量使用标准的SQL编写习惯,避免...
ORACLE中SQL查询语句的优化 ORACLE中SQL查询语句的优化是数据库应用设计中的一项重要技术,它直接影响着数据库的查询效率和性能。在ORACLE中,查询语句的优化需要考虑多种因素,包括索引的选择、驱动表的选择、查询...
MySQL的SQL查询性能优化技术是数据库管理中至关重要的一环,对于提升系统效率和用户体验有着显著影响。本篇主要探讨了优化SQL查询的一些基本原则、企业级监控、配置与参数化、数据管理和性能考量等方面。 首先,...
SQL Server数据库内部采用了一个基于成本的查询优化器,该优化器能够根据统计信息生成查询执行计划,自动优化提交的数据查询操作。 1. **查询分析**:在此阶段,SQL Server优化器会检查每个由正规查询树表示的子句...
总结,MySQL的SQL查询性能优化技术涉及广泛,包括但不限于基础准则、数据结构设计、系统监控、参数配置和动态调整等多个层面。通过综合运用这些技术,可以显著提升MySQL数据库的性能,确保系统稳定高效地运行。
《SQL语言艺术》这本书深入探讨了SQL这一关系型数据库查询语言的核心原则与准则,旨在帮助读者提升SQL查询的效率和实用性。以下是对书中的关键知识点的详细解析: 1. **SQL基础**:SQL(Structured Query Language...
MySQL的SQL查询性能优化是一个复杂而关键的主题,它涉及到数据库的多个层面,包括但不限于配置、监控、查询优化以及数据管理。以下是对标题和描述中提到的一些核心知识点的详细阐述: 1. **基本准则**: - **谨慎...
### DBA必看的SQL优化大全:深入解析索引及其运用 #### 一、深入浅出理解索引结构 在数据库领域,索引扮演着至关重要的角色,它如同书籍的目录,极大地提升了数据检索的速度与效率。根据其构建方式与功能的不同,...
综上所述,通过选择合适的优化器模式、合理的访问方式、共享SQL语句以及遵循一些基本的SQL编写准则,可以有效地提高Oracle数据库中SQL语句的执行效率。这些策略不仅有助于提升应用程序的整体性能,还能减少数据库...
SQL语句优化是数据库管理和应用性能提升的一个关键环节,其重要性在于能够显著减少查询时间,提高数据库资源的使用效率。以下是根据给定文件内容,对SQL语句优化的详细知识点进行梳理: 1. 大小写对SQL语句的影响...
1 引言 随着各个应用领域信息化程度日益提高,数据库中的数据量迅猛增长,导致数据库系统的查询...通过分析关系代数表达式的等价变换准则及查询代价,于给定的SQL查询与关系代数表达式对应关系,研究并分析基于关系
SQL Server 数据库性能优化技巧 设计一个应用系统似乎并不难,但是要想使系统达到最优化的性能并不是一件容易的事。在开发工具、数据库设计、应用程序的结构、查询设计、接口选择等方面有多种选择,这取决于特定的...
**8.3 查询优化的一般准则** 优化的目标是找到计算给定关系表达式最有效的方法。例如,在选择查询计划时,会考虑I/O操作的次数、中间结果的大小以及处理速度等因素。 **8.4 代数优化**和**8.5 物理优化**是查询优化...
综上所述,关系查询处理和查询优化是数据库系统中提高性能的关键技术,它们涉及到查询分析、优化准则的应用、关系代数优化以及物理优化等多个层面。理解并掌握这些概念和技术,对于设计高效的数据查询和管理至关重要...
【关系系统及其查询优化】是数据库领域的重要主题,主要涵盖了关系模型的基本理论和数据库管理系统(DBMS)在处理查询时的优化策略。 首先,关系系统是建立在关系数据模型基础上的数据库系统,按照E.F.Codd提出的...
当执行一个SQL语句时,无论是查询、更新、删除还是插入数据,都需要由数据库的查询优化器来决定如何最高效地获取数据。优化器会根据数据库中的统计信息来选择一个成本最低的执行计划。因此,优化SQL语句能够减少数据...
- **优化建议**:积累并学习一些实用的SQL优化技巧,比如使用EXPLAIN分析执行计划等。 - **示例**:`EXPLAIN SELECT * FROM table WHERE column = 'value';` #### 二十七、尽量避免的事情 - **优化建议**:避免在...
下面介绍一些开发者在数据库操作中要注意的SQL编码准则。虽然本文不能覆盖所有的准则,但还是希望能给开发者带来些许帮助。下面来看看在编码实践中哪些应该做,哪些不应该做。 1. 在长时间运行的查询和短查询中...
综上,Oracle优化涉及到许多方面,包括索引策略、SQL优化、内存管理、分区策略等。理解并熟练运用这些准则,可以显著提升Oracle数据库的性能,满足高并发和大数据量的业务需求。在实际操作中,应结合具体情况灵活...