大家都知道,用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会引起全表扫描,并且没有任何业务意义,是一定要杜绝的。

哪些SQL语句会引起全表扫描相关推荐

  1. SQL数据库不用SQL语句能显示全表的内容_详解mysql数据库sql优化技巧总结

    概述 关于SQL优化的教程很多,但是比较杂乱.所以抽空整理了一下,也写出来跟大家分享一下.以下主要针对MySQL数据库,Oracle数据库也可以参考. 优化技巧总结 1.建索引 对查询进行优化,要尽量 ...

  2. SQL数据库不用SQL语句能显示全表的内容_MySQL百万级数据库优化方案

    一.百万级数据库优化方案 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断 ...

  3. SQL数据库不用SQL语句能显示全表的内容_阿里巴巴数据库分库分表的实践

    在2006年阿里巴巴B2B团队以开源方式研发了Cobar这一关系型数据的分布式处理系统.该系统在很大程度上解决了最初使用Oracle数据库因为存储数据变得越来越大带来的扩展性问题,并且为开发人员提供了 ...

  4. SQL数据库不用SQL语句能显示全表的内容_2020别再说你了解数据库了,你搞清楚这些问题了吗?...

    程序员中一直有一个段子广为流传:大不了我们"删库跑路" 由此可见作为一个程序员,不了解数据库怎么能行,那么数据库到底是个啥呢,作为一个Java工程师,平时和数据库打交道着实不少,所 ...

  5. SQL数据库不用SQL语句能显示全表的内容_Sql性能优化看这一篇就够了

    前言 一个优秀开发的必备技能:性能优化,包括:JVM调优.缓存.Sql性能优化等.本文主要讲基于Mysql的sql性能优化. 知识储备 首先我们需要了解执行一条查询SQL时Mysql的处理过程: ​其 ...

  6. SQL数据库不用SQL语句能显示全表的内容_MySQL DBA必读:万字归总表设计与SQL编写技巧...

    作者介绍 刘书浩,"移动云"DBA,负责"移动云"业务系统的数据库运维.标准化等工作:擅长MySQL技术领域,熟悉MySQL复制结构.Cluster架构及运维优 ...

  7. SQL数据库不用SQL语句能显示全表的内容_100道MySQL数据库经典面试题解析

    1. MySQL索引使用有哪些注意事项呢? 可以从三个维度回答这个问题:索引哪些情况会失效,索引不适合哪些场景,索引规则 索引哪些情况会失效 查询条件包含or,可能导致索引失效 如何字段类型是字符串, ...

  8. oracle trim 性能,ORACLE sql调优之记录一次trim函数引发的大表全表扫描

    2017年8月14日,一地市oracle相关的调度程序ETL抽取速度奇慢,sql语句每次执行平均时间要9秒左右,如果所示: 该调度过程涉及的sql语句如下: select count(*) from ...

  9. sql语句优化之一:尽量使用索引避免全表扫描

    url:http://lzz7658823.iteye.com/?page=3 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量 ...

最新文章

  1. Tomat启动自动运行一个类
  2. 应对恶劣网络环境,为php-curl设置超时限制,防止服务器卡死
  3. 云计算管理三利器:Nagios、Ganglia和Splunk
  4. python csdn博客_利用Python抓取CSDN博客
  5. IP Cam须改原厂密码防黑客
  6. java中的布局文件改成,Android 动态设置布局文件的exception
  7. 【计算机网络复习】1.1.3 速率相关的性能指标
  8. spring cloud 学习(6) - zuul 微服务网关
  9. JavaScript实现继承的方式和各自的优缺点
  10. layui中弹出层的两种表达方式
  11. 一种边播边下的播放策略
  12. vant 软键盘_H5页面 绝对定位元素被 软键盘弹出时顶起
  13. 一文搞懂什么是禁忌搜索算法Tabu Search【附应用举例】
  14. 《数据库应用》课程设计人事管理系统(java源代码)
  15. 对称加密php,PHP实现对称加密与解密
  16. 产品经理考什么证书?考这个准没错
  17. 使用Adobe Acrobat编辑PDF,实现文件签名
  18. 爬虫案例 --- Python 爬取淘宝数据存到数据库
  19. 猿人学之js混淆源码乱码
  20. 「Python入门」Python代码规范(风格)

热门文章

  1. 二进制128位整数运算
  2. 一题多解 —— 二项式分布的期望和方差的计算
  3. 二分查找 —— 有序数组不小于(不大于)某数的第一个(最后一个)元素
  4. 【学习 OpenCV】—— core.hpp 核心api
  5. CentOs虚拟机NAT模式下静态IP的配置
  6. mysql 随机记录 newid()_sql随机查询数据语句(NewID(),Rnd,Rand(),random())
  7. 简明python教程-简明Python教程-中文版.pdf
  8. python经典程序实例-Python3经典100例(③)
  9. python基础教程-Python入门教程完整版(懂中文就能学会)
  10. 编程语言python入门-Python基础教程 - 全文