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

哪些SQL语句会引起全表扫描

    博客分类:
  • sql
 
阅读更多

本文导读:大家都知道,用SQL语句对数据库进行操作时,如果引起全表扫描会对数据库的性能形成影响,下面向大家简单介绍SQL中哪些情况会引起全表扫描。

1、模糊查询效率很低:

原因:like本身效率就比较低,应该尽量避免查询条件使用like;对于like ‘%...%’(全模糊)这样的条件,是无法使用索引的,全表扫描自然效率很低;另外,由于匹配算法的关系,模糊查询的字段长度越大,模糊查询效率越低。

解决办法:首先尽量避免模糊查询,如果因为业务需要一定要使用模糊查询,则至少保证不要使用全模糊查询,对于右模糊查询,即like ‘…%’,是会使用索引的;左模糊like

‘%...’无法直接使用索引,但可以利用reverse + function index 的形式,变化成 like ‘…%’;全模糊是无法优化的,一定要的话考虑用搜索引擎。出于降低数据库服务器的负载考虑,尽可能地减少数据库模糊查询。


2、查询条件中含有is null的select语句执行慢

原因:Oracle 9i中,查询字段is null时单索引失效,引起全表扫描。

解决方法:SQL语法中使用NULL会有很多麻烦,最好索引列都是NOT NULL的;对于is null,可以建立组合索引,nvl(字段,0),对表和索引analyse后,is null查询时可以重新启用索引查找,但是效率还不是值得肯定;is not null 时永远不会使用索引。一般数据量大的表不要用is null查询。


3、查询条件中使用了不等于操作符(<>、!=)的select语句执行慢

原因:SQL中,不等于操作符会限制索引,引起全表扫描,即使比较的字段上有索引

解决方法:通过把不等于操作符改成or,可以使用索引,避免全表扫描。例如,把column<>’aaa’,改成column<’aaa’ or column>’aaa’,就可以使用索引了。 


4、or语句使用不当会引起全表扫描

原因:where子句中比较的两个条件,一个有索引,一个没索引,使用or则会引起全表扫描。例如:where A==1 or B==2,A上有索引,B上没索引,则比较B=:2时会重新开始全表扫描。  

5、组合索引,排序时应按照组合索引中各列的顺序进行排序,即使索引中只有一个列是要排序的,否则排序性能会比较差。

例如:create index skip1 on emp5(job,empno,date); 

select job,empno from emp5 where job=’manager’and empno=’10’ order by job,empno,date desc;

实际上只是查询出符合job=’manager’and empno=’10’条件的记录并按date降序排列,但是写成order by date desc性能较差。

6、Update 语句,如果只更改1、2个字段,不要Update全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志。 

7、对于多张大数据量(这里几百条就算大了)的表JOIN,要先分页再JOIN,否则逻辑读会很高,性能很差。  

8、select count(*) from table;这样不带任何条件的count会引起全表扫描,并且没有任何业务意义,是一定要杜绝的。

 

https://my.oschina.net/ray1421/blog/760336

分享到:
评论

相关推荐

    解析SQL语句在何种情况下进行全表扫描

    以下是SQL语句在何种情况下可能会执行全表扫描的详细解释: 1. **无任何限定条件**:当查询中没有`WHERE`子句,或者`WHERE`子句中的条件无法利用任何索引时,数据库系统通常会执行全表扫描。因为没有筛选条件,系统...

    SQL 语句完全优化

    ### SQL语句完全优化 在IT领域,特别是数据库管理和应用开发方面,SQL(Structured Query Language)作为一门标准语言被广泛应用于各种数据库系统中。而针对Oracle数据库,如何编写出不仅功能强大而且性能卓越的SQL...

    SQL 执行超长语句

    6. **避免全表扫描**:通过优化WHERE子句中的条件表达式,尽量让数据库管理系统能够快速定位到所需行,从而避免全表扫描带来的性能损耗。 #### 四、SQL执行超长语句示例 以下是一个涉及子查询的超长SQL语句示例: ...

    sql语句、动态SQL语句基本语法

    - 避免全表扫描:尽量使用WHERE子句限制查询范围,避免对大量数据进行全表扫描。 - 分析查询计划:通过分析查询计划找出性能瓶颈并优化SQL语句。 - 减少子查询:尽可能将子查询转化为JOIN操作,以减少查询复杂度。 ...

    oracle全表扫描的3种优化手段

    在Oracle数据库管理中,全表扫描(Full Table Scan,简称FTS)是指查询语句对整个表的数据进行读取的一种操作方式。当索引选择性较差或者表较小的时候,Oracle可能会选择全表扫描而非索引扫描。全表扫描虽然能够快速...

    sql语句的优化

    4. **限制使用OR操作符**:当其中一个字段有索引,另一个没有索引时,OR会导致全表扫描。推荐使用UNION ALL来替代,例如: ```sql SELECT id FROM t WHERE num = 10 UNION ALL SELECT id FROM t WHERE name = '...

    SQL语句优化规则

    - **全表扫描**:Oracle通过一次性读取多个数据块来优化全表扫描。虽然这在某些情况下是必要的,但在大数据量时,全表扫描可能导致性能下降。 - **通过ROWID访问**:ROWID包含了记录的物理位置信息,通过索引可以...

    通过分析SQL语句的执行计划优化SQL(总结)

    基于执行计划的分析,我们可能需要重写SQL语句,如避免全表扫描、减少不必要的子查询、使用连接替代子查询等。 通过以上分析,我们可以看出,理解和优化SQL语句的执行计划是数据库管理员和开发人员的重要技能。这...

    Oracle SQL语句性能优化

    - 全表扫描:虽然全表扫描会读取所有记录,但Oracle通过一次性读取多个数据块来优化这一过程。然而,对于大型表,应尽量避免全表扫描。 - ROWID访问:ROWID包含记录的物理位置信息,通过索引可以快速定位ROWID,...

    压测Oracle的SQL语句的性能情况

    1. **SQL优化**:优化SQL语句是提升性能的关键,包括避免全表扫描,使用索引,减少子查询,合理使用连接方式等。 2. **绑定变量**:使用绑定变量可以防止硬解析,提高SQL执行效率,减少解析开销。 3. **执行计划**...

    超好用的SQL语句生成及分析器

    分析器还能帮助找出潜在的性能瓶颈,如未使用索引、全表扫描等问题,对于数据库优化至关重要。 3. Delphi 5相关: "My_Delphi5.bpl"和"My.bpl"可能是Delphi 5编译生成的库文件。Delphi是一种基于Object Pascal的...

    sql语句性能调整原则

    8. **避免全表扫描**:尽量使SQL语句能够利用索引,避免全表扫描。全表扫描对大型表来说极其耗时。 9. **适当使用子查询和连接操作**:子查询和连接操作都有各自的优缺点,需要根据具体情况进行选择。有时候,子...

    sql语句优化建议

    1. **避免全表扫描**:对于大型表,全表扫描会导致严重的性能瓶颈。通过创建和合理使用索引,可以极大提高查询速度,尤其是当查询条件包含WHERE子句时。索引能够帮助数据库快速定位到特定的数据行,而无需遍历整个表...

    sql语句电子书 . .

    1. 查询优化:学习如何编写高效的SQL查询,包括避免全表扫描、使用索引等策略。 2. 性能监控:了解如何分析和调整SQL查询性能,提升数据库系统的整体效率。 以上只是“SQL语句电子书”可能涉及的一些关键知识点,...

    自己编写sql语句分析工具

    8. **优化建议**:高级的分析工具可能还会提供性能优化建议,如使用索引、避免全表扫描等。 9. **错误检查**:对输入的SQL语句进行语法检查,及时发现并指出潜在的错误,帮助用户修正。 在实际应用中,这样的工具...

    Delphi中sql语句的使用总结

    例如,避免不必要的全表扫描,利用索引来加速查询等。 通过以上介绍可以看出,在Delphi中使用SQL语句进行数据库操作非常灵活且功能强大。掌握这些基础知识后,可以根据实际项目需求进一步扩展和优化。

    SQL语句性能分析之explain

    3. **减少全表扫描**:尽量避免`ALL`类型的查询,因为这会导致大量的磁盘I/O操作,降低查询速度。 4. **优化`WHERE`子句**:确保`WHERE`子句中使用的条件能够充分利用索引,从而减少需要扫描的数据量。 5. **理解`...

    非常好用的SQL语句优化34条+sql语句基础

    2. **避免全表扫描**:尽量通过索引来定位数据,减少对全表扫描的依赖。使用`EXPLAIN`分析查询计划,了解是否在使用索引。 3. **WHERE子句的正确使用**:将筛选条件放在索引字段上,避免在函数或运算符内部使用索引...

Global site tag (gtag.js) - Google Analytics