接上篇!!!

SQL语句优化的一些方法

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null-- 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=

3.应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用索引而进行全表扫描。

4.应尽量避免在 where 子句中使用or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num=10 or num=20-- 可以这样查询:select id from t where num=10 union all select id from t where num=20

5.in 和 not in 也要慎用,否则会导致全表扫描,如:select id from t where num in(1,2,3)-- 对于连续的数值,能用 between 就不要用 in 了:select id from t where num between 1 and 3

6.下面的查询也将导致全表扫描:select id from t where name like ‘%李%’若要提高效率,可以考虑全文检索。

7.如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然 而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:select id from t where num=@num-- 可以改为强制查询使用索引:select id from t with(index(索引名)) where num=@num

8.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:select id from t where num/2=100-- 应改为:select id from t where num=100*2

9.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:select id from t where substring(name,1,3)=’abc’-- name以abc开头的id应改为:select id from t where name like ‘abc%’

10.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

最后,小编分类整理了许多java进阶学习材料和BAT面试给热爱IT行业的你,如果需要资料的请转发此文章后再私聊小编回复【java】就能领取2019年java进阶学习资料和BAT面试题以及《Effective Java》(第3版)电子版书籍。也可以加群:712263501领取海量学习资料进行学习。

MySQL面试题 | 附答案解析(十八)相关推荐

  1. MySQL面试题 | 附答案解析(八)

    事务 什么是数据库事务?事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结果必须使数据库从一种一致性状态变到另一种一致性状态.事务是逻辑上的一组操作,要么都执行,要么都不执行 ...

  2. MySQL面试题 | 附答案解析(十六)

    接上篇!!! 2. SQL的生命周期? (1)应用服务器与数据库服务器建立一个连接 (2)数据库进程拿到请求sql (3)解析并生成执行计划,执行 (4)读取数据到内存并进行逻辑处理 (5)通过步骤一 ...

  3. MySQL面试题 | 附答案解析(二十)

    接上篇!!! 5. MySQL的复制原理以及流程 主从复制:将主数据库中的DDL和DML操作通过二进制日志(BINLOG)传输到从数据库上,然后将这些日志重新执行(重做):从而使得从数据库的数据与主数 ...

  4. MySQL面试题 | 附答案解析(十九)

    数据库优化 1. 为什么要优化 (1)系统的吞吐量瓶颈往往出现在数据库的访问速度上 (2)随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 (3)数据是存放在磁盘上的,读写速度无法和 ...

  5. MySQL面试题 | 附答案解析(十五)

    SQL优化 1. 如何定位及优化SQL语句的性能问题?创建的索引有没有被使用到?或者说怎么才可以知道这条语句运行很慢的原因? 对于低性能的SQL语句的定位,最重要也是最有效的方法就是使用执行计划,My ...

  6. MySQL面试题 | 附答案解析(十四)

    接上篇!!! 5. 什么是子查询 (1)QL语句的查询结果做为另一条查询语句的条件或查询结果 (2)SQL语句嵌套使用,内部的SQL查询语句称为子查询. 6. 子查询的三种情况 (1)询是单行单列的情 ...

  7. MySQL面试题 | 附答案解析(十二)

    (一)存储过程与函数 什么是存储过程?有哪些优缺点? 存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需要创建一次,以后在该程序中就可以调用多次.如果某次操作需要执行多次SQL,使用 ...

  8. MySQL面试题 | 附答案解析(十)

    接上篇:锁 5. MySQL中InnoDB引擎的行锁是怎么实现的? 答:InnoDB是基于索引来完成行锁例: select * from tab_with_index where id = 1 for ...

  9. MySQL面试题 | 附答案解析(五)

    创建索引时需要注意什么? (1)非空字段:应该指定列为NOT NULL,除非你想存储NULL.在mysql中,含有空值的列很难进行查询优化,因为它们使得索引.索引的统计信息以及比较运算更加复杂.你应该 ...

最新文章

  1. HIve分组查询返回每组的一条记录
  2. django Table doesn't exist
  3. java map可以直接用增强for吗
  4. linux初级学习笔记七:linux用户管理,密码和组命令详解!(视频序号:04_1)
  5. rabbitmq 集群数据存储与单点故障
  6. mysql为什么需要中间件_究竟为什么要引入数据库中间件
  7. 机器学习:Multinoulli分布与多项式分布
  8. java在文件里搜字段_Java 如何找出两个文本文件中有相同字段的行
  9. 【Unity编辑器扩展】Unity发布资源到商店流程Unity Asset Store Publish
  10. embed预览pdf_09.html使用iframe、embed查看pdf不显示(未解决),使用pdf.js预览pdf
  11. 深度Deepin20 安装软件的依赖问题(sudo apt --fix-broken install)
  12. LeCo-83.删除排序链表中的重复元素
  13. agx上搭建ros2
  14. 再次出现用户净流失,大失颜面的中国移动推出超低价套餐争取用户
  15. js红宝石书第四版--P446有点不严谨的地方的指出
  16. 华为认证考试一定要去报培训班吗?
  17. RunAsSpc使用——AD普通用户自行安装高权限软件
  18. 4123版驱动最新支持《霍格沃茨之遗》,英特尔锐炫显卡带你畅游魔法世界
  19. PMP项目管理证书难考吗?
  20. 这五个适合上班族的副业你知道多少

热门文章

  1. NVIDIA Jarvis:一个GPU加速对话人工智能应用的框架
  2. YOLO3升级优化版!Poly-YOLO:支持实例分割!
  3. 3D车道线检测:Gen-LaneNet
  4. 半导体群聚、虚拟垂直、整合
  5. java gui 案例_JavaGui入门—布局的嵌套使用附实例
  6. C++ map 的使用
  7. ValueError: invalid literal for int() with base 10: “ ”
  8. 第五节 RabbitMQ在C#端的应用-消息收发
  9. Kubernetes 网络排错指南
  10. Jquery前端分页插件pagination同步加载和异步加载