全表扫描是数据库搜寻表的每一条记录的过程,直到所有符合给定条件的记录返回为止。通常在数据库中,对无索引的表进行查询一般称为全表扫描;然而有时候我们即便添加了索引,但当我们的SQL语句写的不合理的时候也会造成全表扫描。

以下是经常会造成全表扫描的SQL语句及应对措施:

1. 使用null做为判断条件

如:select account from member where nickname = null;

建议在设计字段时尽量将字段的默认值设为0,改为select account where nickname = 0;

2. 左模糊查询Like %XXX%

如:select account from member where nickname like ‘%XXX%’ 或者 select account from member where nickname like ‘%XXX’

建议使用select account from member where nickname like ‘XXX%’,如果必须要用到做查询,需要评估对当前表全表扫描造成的后果; 刘加东@酷听说

3. 使用or做为连接条件

如:select account from member where id = 1 or id = 2;

建议使用union all,改为 select account from member where id = 1 union all select account from member where id = 2;

4. 使用in时(not in)

如:select account from member where id in (1,2,3)

如果是连续数据,可以改为select account where id between 1 and 3;当数据较少时也可以参考union用法;

或者:select account from member where id in (select accountid from department where id = 3 ),可以改为select account from member where id exsits (select accountid from department where id = 3)

not in 可以对应 not exists;

5.使用not in时

如select account where id not in (1,2,3)

6.使用!=或<>时

建议使用 ,>=,between等;

7.对字段有操作时也会引起权标索引

如select account where salary * 0.8 = 1000 或者 select account where sustring(nickname,1,3) = ‘zhangxiaolong’;

8.使用count(*)时

如select count(*) from member;

建议使用select count(1) from member;

9.使用参数做为查询条件时

如select account from member where nickname = @name

由于SQL语句在编译执行时并不确定参数,这将无法通过索引进行数据查询,所以尽量避免; 刘加东@酷听说

当不规范的写法造成全表扫描时,会造成CPU和内存的额外消耗,甚至会导致服务器崩溃。在团队协作中难免会遇到一些初学者,除了安排合理的任务外,资深的工程师也要做好Code Review。否则当我们有海量数据时,不规范的语句会带来很严重的后果,一定要慎重、慎重。

文章链接为:https://blog.csdn.net/u012501054/article/details/80361447

mysql什么情况会扫描所有_造成MySQL全表扫描的原因相关推荐

  1. mysql 全表扫描、全索引扫描、索引覆盖(覆盖索引)

    full index scan:全索引扫描,查询时,遍历索引树来获取数据行.如果数据不是密集的会产生随机IO 在执行计划中是Type列,index full table scan:通过读物理表获取数据 ...

  2. oracle全表扫过程讲解,CSS_浅谈存取Oracle当中扫描数据的方法,1) 全表扫描(Full Table Scans, FTS) - phpStudy...

    浅谈存取Oracle当中扫描数据的方法 1) 全表扫描(Full Table Scans, FTS) 为实现全表扫描,Oracle读取表中所有的行,并检查每一行是否满足语句的WHERE限制条件一个多块 ...

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

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

  4. mysql limit会扫描全表_为什么用了limit还会进行全表扫描?

    你的位置: 问答吧 -> PHP -> 问题详情 为什么用了limit还会进行全表扫描? 现有一张100万行记录的表test, 执行以下语句后: explain   select   * ...

  5. MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析...

    文章出处:http://inter12.iteye.com/blog/1430144 MYSQL的全表扫描,主键索引(聚集索引.第一索引),非主键索引(非聚集索引.第二索引),覆盖索引四种不同查询的分 ...

  6. MYSQL避免全表扫描__如何查看sql查询是否用到索引(mysql)

    MYSQL避免全表扫描 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引 2.应尽量避免在 where 子句中对字段进行 null 值判断,否 ...

  7. mysql第五章项目二_高性能MySQL笔记 第5章 创建高性能的索引

    索引(index),在MySQL中也被叫做键(key),是存储引擎用于快速找到记录的一种数据结构.索引优化是对查询性能优化最有效的手段. 5.1 索引基础 索引的类型 索引是在存储引擎层而不是服务器层 ...

  8. mysql in 子查询无法使用索引全表扫描 慎用in

    背景 最近慢sql 性能优化 发现一个调用频率高的sql 使用 in 子查询,导致外层全表扫描的问题? 为什么会产生这样的问题?特别强调在优化的使用发现 使用in 和优化后的效果差距 300倍,可见全 ...

  9. mysql索引优化是什么意思_理解MySQL——索引与优化

    写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录.如果没有索引,查询将 ...

最新文章

  1. pytest文档21-pytest-html报告优化(nodeid中文显示[\u6350\u52a9\u6211\u4eec]问题解决)
  2. jpa 测试_使用外星人进行测试:如何使用Arquillian测试JPA类型转换器
  3. Java中子类覆盖父类方法所必须满足的条件
  4. html5酷炫表白代码_七夕表白代码,樱花特效+爱心特效+花瓣+评论留言功能等
  5. 清远高考成绩查询2021年,2021年清远高考最高分多少分,历年清远高考状元
  6. TensorFlow windows之Tensorboard使用
  7. 衔接UI线程和管理后台工作线程的类(多线程、异步调用)[转]
  8. 256 变 4096:分库分表扩容如何实现平滑数据迁移?
  9. Qt 中使用全局变量的方法
  10. @SuppressWarnings注解的详解
  11. 大项目之网上书城(一)——注册页面
  12. a small test by windows live writer 2011
  13. PHP和Java的主要区别有哪些呢?
  14. 8月份全国省会城市快递上门签收分析-谁是剁手王城?
  15. 部分国家人均GDP和生活满意度可视化
  16. HBase shell删除表失败:ERROR: Table user is enabled. Disable it first.
  17. 在 cmd 中启动 Android 模拟器
  18. vue怎么制作甘特图——dhtmlx-gantt
  19. jQuery实现 自动滚屏操作
  20. 轻量级图像分类模型-MobileNetV3阅读笔记

热门文章

  1. java range(10)_Java Year range()用法及代码示例
  2. android 之自定义适配器(重写的getView()方法中convertView元素的妙用)一个实例
  3. java 学习心得 (近期的)
  4. 机器学习——数据降维
  5. python 读取txt
  6. subplot 真正含义
  7. 语音预处理:服务器平台“部署”
  8. Pandas (GeoPandas)笔记:set_index reset_index
  9. 文巾解题 27. 移除元素
  10. MATLAB在人工智能中的应用案例:以MATLAB的方式玩转自动驾驶(附部分代码)