lgms2008 于 2006-09-20 00:18:05发表:

5. NOT

我们在查询时经常在where子句使用一些逻辑表达式,如大于、小于、等于以及不等于等等,也可以使用and(与)、or(或)以及not(非)。NOT可用来对任何逻辑运算符号取反。下面是一个NOT子句的例子:

... where not (status ='VALID')

如果要使用NOT,则应在取反的短语前面加上括号,并在短语前面加上NOT运算符。NOT运算符包含在另外一个逻辑运算符中,这就是不等于(<>;)运算符。换句话说,即使不在查询where子句中显式地加入NOT词,NOT仍在运算符中,见下例:

... where status <>;'INVALID'

再看下面这个例子:

select * from employee where salary<>;3000;

对这个查询,可以改写为不使用NOT:

select * from employee where salary<3000 or salary>;3000;

虽然这两种查询的结果一样,但是第二种查询方案会比第一种查询方案更快些。第二种查询允许Oracle对salary列使用索引,而第一种查询则不能使用索引。

6. IN和EXISTS

有时候会将一列和一系列值相比较。最简单的办法就是在where子句中使用子查询。在where子句中可以使用两种格式的子查询。

第一种格式是使用IN操作符:

... where column in(select * from ... where ...);

第二种格式是使用EXIST操作符:

... where exists (select 'X' from ...where ...);

我相信绝大多数人会使用第一种格式,因为它比较容易编写,而实际上第二种格式要远比第一种格式的效率高。在Oracle中可以几乎将所有的IN操作符子查询改写为使用EXISTS的子查询。

第二种格式中,子查询以‘select 'X'开始。运用EXISTS子句不管子查询从表中抽取什么数据它只查看where子句。这样优化器就不必遍历整个表而仅根据索引就可完成工作(这里假定在where语句中使用的列存在索引)。相对于IN子句来说,EXISTS使用相连子查询,构造起来要比IN子查询困难一些。

通过使用EXIST,Oracle系统会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间。Oracle系统在执行IN子查询时,首先执行子查询,并将获得的结果列表存放在在一个加了索引的临时表中。在执行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。这也就是使用EXISTS比使用IN通常查询速度快的原因。

同时应尽可能使用NOT EXISTS来代替NOT IN,尽管二者都使用了NOT(不能使用索引而降低速度),NOT EXISTS要比NOT IN查询效率更高。

linux mysql 性能提高,高手心得:提高MySQL性能的方法相关推荐

  1. Android应用性能优化——学习心得

    Android应用性能优化--学习心得 Android应用性能优化这门课分为内存优化.视图优化.电量优化.Bitmap优化.其他优化等五大部分,下面这对这五大部分的学习能容做一下总结: 一. 内存优化 ...

  2. mysql 虚拟列索引_使用MySQL 5.7虚拟列提高查询效率

    原标题:使用MySQL 5.7虚拟列提高查询效率 导读 翻译团队:星耀队@知数堂 团队成员:星耀队-芬达,星耀队-顺子,星耀队-M哥 原文出处:https://www.percona.com/blog ...

  3. mysql怎么加快搜索_优化mysql数据库 提高检索速度

    在优化查询中,数据库应用(如MySQL)即意味着对工具的操作与使用.使用索引.使用EXPLAIN分析查询以及调整MySQL的内部配置可达到优化查询的目的. 任何一位数据库程序员都会有这样的体会:高通信 ...

  4. mysql主从数据库含义_(转)Mysql数据库主从心得整理

    管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验所写,整理了一下,分享给各位同行,希望对 ...

  5. mysql insert 不需要日志_MySQL数据库性能优化(1)「转」

    1.MySQL概述 从本文开始我们将讨论建立在块存储方案之上的关系型数据库的性能优化方案和集群方案.关系型数据库的选型将以创业公司.互联网行业使用最广泛的MySQL数据为目标,但是MySQL的安装过程 ...

  6. mysql参数配置详情_MySQL配置文件mysql.ini参数详解、MySQL性能优化

    类型:数据库类大小:1.7M语言:英文 评分:6.6 标签: 立即下载 my.ini(Linux系统下是my.cnf),当mysql服务器启动时它会读取这个文件,设置相关的运行环境参数. my.ini ...

  7. SUSE Linux 11里Nginx+Resin+JSP+Memcached+MySQL安装配置整合

    服务器运维与网站架构|Linux运维|X研究 let's face reality,loyalty to an ideal! 首页 Linux Nginx Security Shell 服务器架构 互 ...

  8. linux进去mysql数据库的命令_Linux下Mysql 操作命令

    Linux下Mysql 操作命令 一.连接MySQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlb ...

  9. mysql笔记(锁、事务、性能优化、压测结果)

    Mysql 该笔记,主要根据kkb课程并结合网上资料和自己的理解而形成. 一.Mysql架构 1.1 逻辑架构 这是从网上copy过来的图.网上一些教程会把mysql也进行分层. 连接层:Connec ...

最新文章

  1. 一起来学ES —— 浅谈Nested结构
  2. 【Maven学习】Maven打包生成包含所有依赖的jar包
  3. 重写__repr__与__str__函数
  4. 贝叶斯估计和极大似然估计
  5. 怎么理解python循环_如何理解Python的循环设计
  6. Windows 命令行改主机名、加域、退域、更改IP
  7. Fiddler模拟请求报文
  8. sourceTree中git工作流使用
  9. sap crystal reports(水晶报表) 2016 SP7中文破解版
  10. firebug-2.0.19-fx.xpi绿色免费下载
  11. 亚泰盛世携NB物理实验邀你莅临第66届中国教育装备展
  12. 服务器显示初始化失败怎么回事,服务器初始化失败
  13. SDL农场游戏开发 1.环境搭建
  14. gitlab修改项目名称
  15. Android命令-重点命令-pm/am/content/wm/appops
  16. 1919: kirito's 星爆气流斩 多重背包
  17. 苹果支付在哪里设置_微信刷脸支付怎么开通,在哪里设置?
  18. Revisiting Network Support for RDMA
  19. 【leetcode】 剑指 Offer学习计划(java版本含注释)(上)
  20. 一步一步教你网站采集规则

热门文章

  1. pyqt安装_Win10下安装LabelImg以及使用(绝对是全网最简单的教程)
  2. bp神经网络预测未来五年数据_预测 | 未来五年以太网收发器出货将达2.75亿只
  3. java找重复字符串_在java中怎样查找重复字符串
  4. php发卡8.0源码_素材资源解析平台PHP源码 V8.0运营版+会员功能+代理功能+卡密充值...
  5. win10搜索框没反应怎么修复
  6. html5鼠标下拉浮窗固定,【前端技术】vue-floating-menu可拖拽吸附的浮窗菜单
  7. 计算机主机和cpu的区别,服务器CPU和普通电脑CPU有什么区别?
  8. mybatis plus当月数据查询_Springboot+mybatis(plus)+druid多数据源
  9. 自学java去哪找工作比较好_如何自学java?什么程度可以找工作?
  10. dateframe取某列数据_Python获取时序数据并进行可视化分析