`
464772913
  • 浏览: 25379 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

常见sql优化

 
阅读更多

DBMS:数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。

1、建立索引

     在经常检索的字段上加入索引,能很大程度上提升性能,当遇到检索比较慢的时候,第一时间想到的就是加入索引。

 

2、调整Where子句中的连接顺序

 

    DBMS一般采用自下而上的顺序解析Where子句,根据这个原理,表连接最好写在其他的Where条件之前,这样就可以过滤掉最大的数据记录。

 

    如下面的SQL性能较差:

 

     select * from T_Person

 

      Where FSalary > 50000

 

      AND FPosition = 'Manager'

 

      AND 25 < (select  count(*)from T_Manager where ID = T_Person.FmanagerID)

 

  我们将子句移到前面,这样的SQL性能比较好:

 

     select * from T_Person

 

      Where 25 < (select  count(*)from T_Manager where ID = T_Person.FmanagerID)

 

      AND  FSalary > 50000

 

      AND FPosition = 'Manager'

 

4.Select 语句中避免使用*

 

   “Select *” 比较简单,但是除非真的需要检索所有的列,否则这样将检索出不需要的列,增加网络负载和服务器的资源消耗。即使确实需要检索所有的列,也不要使用select *,因为这个是一个非常低效的方法,DBMS在解析的过程中,会将* 依次转换成所有的列名,这意味着将耗费更多的时间。

 

5.尽量将多条SQL语句压缩到一句SQL中,在含有子查询的 SQL语句中,要特别注意减少对表的查询.

 

   每次执行SQL的时候都要建立网络连接,进行权限校验,进行SQL语句的查询优化,发送执行结果,这个过程是很耗时的,因此应该尽量避免过多的执行SQL语句,能够压缩到一句SQL执行的语句就不要用多条来执行。

 

6.用Where子句中替换Having子句

 

   要避免使用Having子句,因为Having只会在检索出所有的记录之后才对结果集进行过滤。如果能通过Where子句限制记录的数目,那就能减少这方面的开销。Having中的条件一般用于聚合函数的过滤,除此之外,应该将条件写在Where子句中。

 

7.使用表的别名

 

   当在SQL语句中有连接多个表的时候,请使用表的别名并把别名的前缀置于每个列名上,这样就可以减少解析的时间并减少那些有列名歧义引起的语法错误。

 

8. 用EXISTS 替代IN

 

    在查询中,为了满足一个条件,往往需要对另一个表进行连接,在这种情况下,使用EXISTS而不是使用IN,通常将提高查询效率,因为IN子句将执行一个子查询内部的排序和合并。下面的语句2就比语句1效率更高。

 

   语句1:

 

     select * from T_Employee

 

     where FNumber > 0 and FDEPTNO in (select FNumber from T_Department where FmanagerName = 'Tom')

 

 

 

  语句2:

 

   select * from T_Employee where FNumber > 0

 

and EXIESTS (select 1 from T_Department were T_Department.ID = T_Empoyee.FDEPTNO  and Fmanagement = 'Tom')

 

 

 

9.用表连接替换EXISTS

 

   通常来说,表连接方式比EXISTS更有效率,下面的语句比上面的语句2 效率更高

 

   select T_Employee.* from T_Employee ,T_Department d

 

  where T_Employee.FNumber > 0 and T_Department.ID = T_Empoyee.FDEPTNO  and d.Fmanagement = 'Tom'

 

 

 

10.避免在索引列上使用计算

 

   在Where子句中,如果索引列是计算或者函数的一部分,DBMS优化器将不会使用索引而使用全表扫描。

 

 11.用UNION ALL替换UNION

 

     当SQL语句需要UNION两个查询结果集合的时候,即使检索结果中不会有重复的记录,使用UNION这两个结果集同样会尝试合并结果,然后输出最终结果前进行排序。因此,如果检索结果中不会有重复记录的话,应该用UNION ALL替换UNION,这样效率更高。

 

 12.避免隐式类型转换造成全表扫描

 

      Select FID,FAGE,FNAME from T_Person where FAGE =10 (注意“FAGE为String类型的)

 

在这个SQL语句中,将字符串类型字段FLevel与数值10 进行比较,由于大部分数据库的隐式转换类型中数值类型的优先级高于字符串类型,因此DBMS会对FAGE字段进行隐式类型转换,相当于执行:

 

       Select FID,FAGE,FNAME from T_Person where TO_INT(FAGE) =10

 

  所以应该这样写:  Select FID,FAGE,FNAME from T_Person where FAGE = ’10‘

 

13.防止检索范围过宽

 

   如果DBMS优化器认为检索范围过宽,那么它将放弃索引查找而使用全表扫描,下面可能造成检索范围过宽的情况:

 

   (1)使用IS NOT NULL或者不等于判断,可能造成优化器假设匹配的记录数太多。

 

   (2)使用LIEK的时候,"a%"将会使用索引,而"a%c" 和 "%c" 则会使用全表扫描,因此"a%c" 和 "%c" 不能被有效的评估匹配的数量。

分享到:
评论

相关推荐

    常见sql 优化的方法

    ### 常见SQL优化的方法:深入解析与实践 在数据库管理与开发中,SQL查询的性能直接影响到系统的响应速度和资源消耗。本文将详细探讨常见的SQL优化方法,特别是针对Oracle和SQL Server这两种广泛使用的数据库管理...

    基于Oracle数据库的几种常见SQL优化策略.pdf

    基于Oracle数据库的几种常见SQL优化策略.pdf 本文档主要讨论了基于Oracle数据库的几种常见SQL优化策略,以提高数据库的处理性能和查询效率。在当前大数据和物联网发展的背景下,数据库的性能优化变得越来越重要。...

    基于Oracle数据库的几种常见SQL优化策略研究.pdf

    本文将详细介绍几种常见且有效的Oracle数据库SQL优化策略。 首先,明确SQL语句优化的必要性是开展优化工作的前提。SQL语句在数据分析和应用中使用极其频繁,对于大多数应用软件而言,几乎所有的数据库操作都涉及SQL...

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

    SQL优化是数据库管理中的关键环节,它涉及到提升查询性能、减少资源消耗以及改善系统整体效率。SQL优化软件和工具能够帮助数据库管理员(DBA)和开发人员找出性能瓶颈,优化查询逻辑,从而提高数据库系统的响应速度...

    收获,不止SQL优化--抓住SQL的本质1

    - **常见误区**:纠正读者在SQL优化过程中可能存在的错误观念。 - **颠覆传统观点**:挑战一些传统的优化方法,提出新的思考方向。 - **真诚交流**:作者通过提供额外的学习资源等方式,鼓励读者进行深入思考,并...

    18 SQL优化--其他SQL的优化.doc

    ### 常见SQL优化技巧 #### 大批量插入数据 - 使用 `LOAD DATA INFILE` 命令高效地导入数据。 ```sql mysql&gt; LOAD DATA INFILE 'data.txt' INTO TABLE db.my_table; ``` - 在导入大量数据到 MyISAM 表时,可以先...

    SQL优化 '%5400%' LIKE操作符

    #### 二、常见SQL优化技巧 除了上述执行计划的选择外,还有一些常见的SQL优化技巧可以提高查询效率: - **避免使用 `IN` 和 `NOT IN`**:`IN` 和 `NOT IN` 子句可能会导致全表扫描。尤其是在子查询中使用它们时更...

    基于案例学SQL优化

    本主题"基于案例学SQL优化"将深入探讨如何通过实际案例来理解和实践SQL优化的策略和技术。 首先,我们要明确SQL优化的重要性。当数据库规模增大,查询复杂度增加时,未优化的SQL语句可能导致响应时间过长,影响用户...

    sql优化的几种方法

    ### SQL优化的关键方法 #### 一、选择最有效的表名顺序 在构建SQL查询时,尤其是在涉及多个表的连接查询中,表名的顺序对于查询性能有着重要影响。Oracle数据库的解析器是从右向左处理FROM子句中的表名。为了优化...

    sql 语句优化详解及案例

    #### 常见SQL优化策略 1. **合理利用索引**:索引能够加速数据检索过程,但过多或不合理的索引也会增加磁盘空间的消耗和数据更新时的开销。因此,根据查询模式设计合适的索引策略是优化SQL语句的基础。 2. **避免...

    【整理】数据库面试题索引sql优化+数据库SQL优化总结之百万级数据库优化

    本文将深入探讨数据库面试中的常见问题,特别是关于SQL优化和针对大规模数据库的优化策略。首先,我们来看看"数据库面试题索引sql优化.pdf"可能涵盖的内容。 1. **SQL基础与语法**:面试通常会涉及到SQL的基本概念...

    ORACLE-SQL性能优化大全.pdf

    - **SQL优化机制**: - **SQL语句处理过程**:理解SQL语句在Oracle中的处理流程对于优化至关重要。 - **共享SQL区域**:Oracle会在内存的共享池中缓存已执行过的SQL语句,以便后续执行时可以直接使用而无需重新...

    DB2之SQL优化浅析.pdf

    虽然文档中未给出具体的案例,但我们可以假设一些常见的SQL优化场景: - **Case 1: 复杂查询优化** - 原始SQL可能涉及多个表的联接和子查询,通过分解查询、使用合适的索引和连接顺序,可以显著提升性能。 - **...

    Oracle数据库sql优化手册

    Oracle数据库sql优化手册 主要是针对常见的sql进行优化

    SQL优化.pdf

    理解并合理运用SQL优化规则可以帮助开发者写出更加高效和健壮的SQL语句,从而在工作中避免常见的性能瓶颈。这些规则涉及了SQL语句的编写规范、数据库结构的调整技巧,以及查询参数的处理策略,是数据库管理和开发...

    sql优化脚本

    在SQL优化领域,提高数据库性能是一项至关重要的任务。"sql优化脚本"通常是指一系列用于改进查询效率、减少资源消耗和提升系统响应时间的代码片段。以下是对这些知识点的详细阐述: 1. **查询优化**:SQL查询优化是...

    SQL优化经验大全

    ### SQL优化经验大全 在数据库管理和开发过程中,SQL查询优化是一项至关重要的技能。良好的SQL查询不仅可以提高系统的响应速度,还能显著降低系统资源消耗。本文将详细介绍30多条SQL优化的经验,帮助您更好地理解和...

    db2数据库性能优化小技巧

    #### 2.2 常见SQL优化策略 - **索引优化**:合理创建索引,避免过多或过少的索引,确保索引能够被有效利用。 - **查询优化**:简化查询条件,减少不必要的JOIN操作,避免使用SELECT *等全字段查询方式。 - **统计...

    1从案例中推导SQL优化的总体思路与误区

    通过对SQL优化的总体思路和常见误区的探讨,我们可以发现,很多传统观点并不适用于现代数据库环境。因此,在进行SQL优化时,应该结合实际需求和数据库系统的特性来做出决策。同时,随着技术的发展,不断地学习和更新...

Global site tag (gtag.js) - Google Analytics