数据库查询优化之子查询优化
1. 案例
取所有不为掌门人的员工,按年龄分组!
select age as '年龄', count(*) as '人数' from t_emp where id not in (select ceo from t_dept where ceo is not null) group by age;
如何优化?
①解决dept表的全表扫描,建立ceo字段的索引:
此时,再次查询:
②进一步优化,替换not in。
上述SQL可以替换为:
select age as '年龄',count(*) as '人数' from emp e left join dept d on e.id=d.ceo where d.id is null group by age;
结论: 在范围判断时,尽量不要使用not in和not exists,使用 left join on xxx is null代替。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接
相关推荐
-
基于mysql+mycat搭建稳定高可用集群负载均衡主备复制读写分离操作
数据库性能优化普遍采用集群方式,oracle集群软硬件投入昂贵,今天花了一天时间搭建基于mysql的集群环境. 主要思路 简单说,实现mysql主备复制-->利用mycat实现负载均衡. 比较了常用的读写分离方式,推荐mycat,社区活跃,性能稳定. 测试环境 MYSQL版本:Server version: 5.5.53,到官网可以下载WINDWOS安装包. 注意:确保mysql版本为5.5以后,以前版本主备同步配置方式不同. linux实现思路类似,修改my.cnf即可. A主mysql.19
-
MyBatis利用MyCat实现多租户的简单思路分享
前言 本文的多租户是基于多数据库进行实现的,数据是通过不同数据库进行隔离.下面话不多说,来看看详细的介绍: MyCat 基本配置 首先针对多租户配置了多个数据库,在 MyCat 的 schema.xml 中配置了多个 schema. 在 server.xml 中配置了一个用户: 后面会使用 MyCat 注解(就是注释)方式根据不同的标识,将操作指向不同的数据库. 过滤器识别请求匹配对应的数据库 标识有很多种方式可以加以区分,下面使用最简单的一种,通过不同的二级域名进行识别.二级域名和数据库对应的
-
基于MySQL数据库的数据约束实例及五种完整性约束介绍
为了防止不符合规范的数据进入数据库,在用户对数据进行插入.修改.删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确.有效.相容. #数据约束 #五种完整性约束: #NOT NULL :非空约束,指定某列不能为空: #UNIQUE : 唯一约束,指定某列或者几列组合不能重复 #PRIMARY KEY :主键,指定该列的值可以唯一地标识该列记录 #FOREIGN KEY :外键,指定该行记录从属于主表中的一条记录,主要用于参照完
-
利用mycat实现mysql数据库读写分离的示例
什么是MyCAT 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一个融合内存缓存技术.NoSQL技术.HDFS大数据的新型SQL Server 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品 一个新颖的数据库中间件产品 MyCAT关键特性 支持SQL92标准 支持MySQL.Oracle.DB2.SQL Server.PostgreSQL等DB的常见SQL
-
数据库的四种隔离级别
1,读未提交,Read Uncommited. 指的是一个事务读取到另外一个事务还没有提交的内容.这种情况是必须要避免的.因为其他事务未提交的数据,是随时有可能进行回滚的,所以,任何时候,都不应该允许程序读取到某个事务还未提交的数据.如果读取到了别的事务未提交的数据,这种情况称为脏读.要想解决脏读的问题,可以提高数据库的事务隔离级别,把事务隔离级别设置为读已提交. 2,读已提交,Read Committed. 这个隔离级别可以解决脏读的问题. 在该隔离级别下,不允许2个未提交的事务之间并行执行,
-
数据库sql语句优化
为什么要优化: 随着实际项目的启动,数据库经过一段时间的运行,最初的数据库设置,会与实际数据库运行性能会有一些差异,这时我们 就需要做一个优化调整. 数据库优化这个课题较大,可分为四大类: >主机性能 >内存使用性能 >网络传输性能 >SQL语句执行性能[软件工程师] 下面列出一些数据库SQL优化方案: (01)选择最有效率的表名顺序(笔试常考) 数据库的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表将被最先处理,在FROM子句中包含多个表的情况下,你
-
mycat在windows环境下的安装和启动
1.下载 从如下地址下载mycat的安装包: http://www.mycat.io/ 2.解压 解压下载的安装包 3.安装 安装mycat前需要先安装jdk和mysql.mycat1.6版本建议使用的jdk是1.7以上版本,mysql建议使用5.6版本.安装玩jdk和mysql后,进入mycat解压目录下的bin目录,如本文的路径如下: D:\Program Files (x86)\mycat\bin 安装shift键,点击鼠标右键,选择"在此处打开命令窗口"打开命令行窗口(注意需
-
Mysql数据库乱码问题的对应方式
MySQL中数据库乱码一般进行字符集的设定即可,但是乱码可以出现在各个阶段,所以这篇文章整理一下乱码出现的各个阶段以及对应方法. 建库/建表时添加charset设定 建库 CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 建表 create table 表名(字段构成详细列表信息) default charset=utf8; 客户端显示 locale 确认locale设定是否为UTF8方式,一般服务器端没有问题
-
数据库中间件MyCat的介绍
1.Mycat 应用场景 Mycat 发展到现在,适用的场景已经很丰富,而且不断有新用户给出新的创新性的方案,以下是几个典型的应用场景: 1. 单纯的读写分离,此时配置最为简单,支持读写分离,主从切换 2. 分表分库,对于超过 1000 万的表进行分片,最大支持 1000 亿的单表分片 3. 多租户应用,每个应用一个库,但应用程序只连接 Mycat,从而不改造程序本身,实现多租户化 4. 报表系统,借助于 Mycat 的分表能力,处理大规模报表的统计 5. 替代 Hbase,分析大数据 6. 作
-
mysql mycat 中间件安装与使用
一,什么是mycat 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一个融合内存缓存技术.NoSQL技术.HDFS大数据的新型SQL Server 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品 一个新颖的数据库中间件产品 以上是官方说明.其实就是数据库的连接池.mysql proxy也是一种连接池,但是效率很低. 二,mycat 安装 1,下载地址myc
随机推荐
- java selenium 常见web UI 元素操作及API使用
- redis字符串类型_动力节点Java学院整理
- MongoDB数据库查询性能提高40倍的经历分享
- JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
- Dreamweaver常见设计疑难解答
- Nginx中全局变量整理小结
- Java查看本机端口是否被占用源码
- java中静态变量和实例变量的区别详细介绍
- js中的for如何实现foreach中的遍历
- Asp.net控制Tomcat启动关闭的实现方法
- C#值类型和引用类型的深入理解
- 深入Android线程的相关问题解惑
- JS替换字符串中字符即替换全部而不是第一个
- Web前端框架bootstrap实战【第一次接触使用】
- apache的access.log和error.log减肥
- 让微信小程序支持ES6中Promise特性的方法详解
- 基于JavaScript实现选项卡效果
- Java 7大常见排序方法实例详解
- c#扫描图片去黑边(扫描仪去黑边)
- 老生常谈C语言动态函数库的制作和使用(推荐)