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会引起全表扫描,并且没有任何业务意义,是一定要杜绝的。
上面列出了通常会引起全表扫描的常用几种情况,更多的情况需要我们在工作、学习中实践、摸索,才能够深入分析SQL执行计划,找到适合自己系统的SQL数据库解决方案。
- mysql一般使用的事务隔离级别(详解MySQL中事务隔离级别的实现原理)
- mysql索引原理及使用(再有人问你MySQL索引原理,就把这篇文章甩给他!)
- mysql日期与时间函数(MySQL日期函数与时间函数汇总MySQL 5.X)
- mysql 死锁产生的原因和必要条件(Mysql查看死锁与解除死锁的深入讲解)
- plsql常用函数
- laravel数据表配置(laravel实现按月或天或小时统计mysql数据的方法)
- SQL Server表分区
- sqlserver中根据日期时间获取秒数(sql server编写通用脚本实现获取一年前日期的方法)
- apache搭建php环境(Windows上安装Apache2、PHP5、MySQL5及与Resin配合实现多系统之整合)
- SQL中的cast和convert的用法和区别
- docker 增大mysql连接数(docker中修改mysql最大连接数及配置文件的实现)
- dedecms后台账号(dedecms批量删除会员的SQL命令)
- sqlserver百分比数据查询时间(SQL Server统计信息更新时采样百分比对数据预估准确性的影响详解)
- mysql缓存是什么(详解mysql查询缓存简单使用)
- mysql如何解析binlog(MySQL的binlog日志使用详解)
- mysql学习之索引介绍及其原理(MySQL学习教程之聚簇索引)
- 《满江红》不要只当电影看,学生应该这样做(满江红不要只当电影看)
- 电影《民间怪谈录之走阴人》定档8月5日,开启一场中式惊悚之旅(电影民间怪谈录之走阴人定档8月5日)
- 原创图画书,以儿童视角讲述中国故事(以儿童视角讲述中国故事)
- 八月再见 愿你岁月不扰,余生静好(八月再见愿你岁月不扰)
- 赏读 八月再见,九月你好(赏读八月再见九月你好)
- 散文 八月再见,九月,我在风中等你(散文八月再见九月)
热门推荐
- dedecms安全设置(织梦系统DedeCMS设定栏目及文档权限登录后跳转到登陆前的页面的实现方法)
- laravel事务状态(laravel dingo API返回自定义错误信息的实例)
- 云服务器是属于什么类型的服务(什么是真正的云服务器?云服务器优势盘点)
- javascript 经典算法(JavaScript实现的七种排序算法总结推荐!)
- jsfor循环是什么意思(JavaScript中三种for循环语句的使用总结for、for...in、for...of)
- linux双网卡热备配置超详细(linux 使用bond实现双网卡绑定单个IP的示例代码)
- 阿里云centos7java服务器搭建(阿里云 ubuntu16.04搭建IPSec服务)
- ASP.NET获取网页中的图片
- 微信小程序签名怎么操作(微信小程序实现简单手写签名组件的方法实例)
- sql server案例(SQL Server作业报错特殊案例分析)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9