数据库调优(二)Inner Join Merge Join Hash Match
T-SQL 的编码习惯以及规范,影响的是查询优化器对执行计划的选择
健壮的SQL语句,更稳定、更高效
SELECT 几个部分:
- 查询的数据来自什么表
- 需要查询表中哪些字段 (尽量不使用类似于 **SELECT *** )
- 查询出符合哪些特定条件的数据
- 对数据进行排序、分组、汇总等操作 (限定结果集 => SELECT TOP 防止大量IO)
ORDER BY 子句性能取决于参与排序操作的数据量大小,避免大数据量的排序操作(考虑添加非聚集索引)
GROUP BY (DISTINCT 相当于全字段的GROUP BY)
冲突 => 所有的分组和排序需要用到索引,索引不能建立太多
DELETE 检索数据的性能
排他锁,影响到索引;如果频繁删除数据的表,建立索引时,谨慎查询和更新的频率;
WHERE 子句优化
针对筛选条件的语句进行的,其实就是一个合理索引的选择及高效应用
where条件是否合理的判断因素:
- 是否有合适的索引可供使用
字段是否有函数计算
- 返回结果集是否过大
- 是否仅查询出需要的字段
关联查询
=> 嵌套循环 (Inner Join) => 适用于小数据量和大数据量之间的连接操作,是性能最好的连接方式
内部表(数据量多的表)存在索引时,嵌套循环发挥最佳性能,执行计划进行索引查找 Index Seek
外部表存 (数据量小的表)在索引,执行计划进行 索引扫描 Index Scan
=> 合并连接 (Merge Join)
关联表数据相当且存在唯一索引,如果都不存在索引则会进行哈希连接
=> 哈希连接 (Hash Match)
关联表不存在索引,也未进行排序 (考虑在表中的字段增加索引进行 Inner Join 或者 Merge Join)
子查询
子查询尽量集中在where子句中,方便阅读
在一个语句中,子查询的数量不超过3个,整个查询语句涉及的表不超过5个
子查询中的语句会被执行计划分解、简化、特殊的转换,转化成常用的连接操作
避免在子查询中对大量的数据进行汇总或者排序操作
尽量缩小子查询中可能返回的结果集,设计的数据量尽可能小
尽量使用确定的判断符(=/IN/EXISTS)避免使用any、all
数据库调优(二)Inner Join Merge Join Hash Match的更多相关文章
- 浅谈SQL Server中的三种物理连接操作(HASH JOIN MERGE JOIN NESTED LOOP)
简介 在SQL Server中,我们所常见的表与表之间的Inner Join,Outer Join都会被执行引擎根据所选的列,数据上是否有索引,所选数据的选择性转化为Loop Join,Merge J ...
- MySQL面试必考知识点:揭秘亿级高并发数据库调优与最佳实践法则
做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离... 数据库的使用,是开发人员的基本功,对它掌握越清晰越深入,你能做的事情就越多. 今天我们用10分钟 ...
- [转]10分钟梳理MySQL知识点:揭秘亿级高并发数据库调优与最佳实践法则
转:https://mp.weixin.qq.com/s/RYIiHAHHStIMftQT6lQSgA 做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离 ...
- Mysql数据库调优和性能优化的21条最佳实践
Mysql数据库调优和性能优化的21条最佳实践 1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响.MySQL是目前使用最多的开 ...
- 记一次数据库调优过程(IIS发过来SQLSERVER 的FETCH API_CURSOR语句是神马?)
记一次数据库调优过程(IIS发过来SQLSERVER 的FETCH API_CURSOR语句是神马?) 前几天帮客户优化一个数据库,那个数据库的大小是6G 这麽小的数据库按道理不会有太大的性能问题的, ...
- join中级篇---------hash join & merge join & nested loop Join
嵌套循环连接(Nested Loop Join) 循环嵌套连接是最基本的连接,正如其名所示那样,需要进行循环嵌套,嵌套循环是三种方式中唯一支持不等式连接的方式,这种连接方式的过程可以简单的用下图展示: ...
- 【Hive】Hive笔记:Hive调优总结——数据倾斜,join表连接优化
数据倾斜即为数据在节点上分布不均,是常见的优化过程中常见的需要解决的问题.常见的Hive调优的方法:列剪裁.Map Join操作. Group By操作.合并小文件. 一.表现 1.任务进度长度为99 ...
- Mysql数据库调优和性能优化
1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响.MySQL是目前使用最多的开源数据库,但是mysql数据库的默认设置性能非常 ...
- 性能测试之Mysql数据库调优
一.前言 性能调优前提:无监控不调优,对于mysql性能的监控前几天有文章提到过,有兴趣的朋友可以去看一下 二.Mysql性能指标及问题分析和定位 1.我们在监控图表中关注的性能指标大概有这么几个:C ...
随机推荐
- Nodejs学习笔记(1) Nodejs安装+借助express模块简单部署服务器
1 安装 1.1 下载和安装 1.2 什么是REPL?如何使用? 1.3 npm对单一模块的安装和删除功能 1.4 通过package.json自定义模块(安装模块) 1.5 设置全局目录 2 部署网 ...
- VUE移动端音乐APP学习【四】:scroll组件及loading组件开发
scroll组件 制作scroll 组件,然后嵌套一个 DOM 节点,使得该节点就能够滚动.该组件中需要引入 BetterScroll 插件. scroll.vue: <template> ...
- ECharts系列 (01):地图三级下钻
前言 最近项目中用到了地图下钻功能,GitHub上找到了一个轮子 - echarts3-chinese-map-drill-down,启动项目看了一下Demo,动画衔接的很流畅,感觉做的非常棒,膜拜大 ...
- 14、MyBatis教程之全部(包括所有章节)
MyBatis 3.5.5 教程 1.环境准备 jdk 8 + MySQL 5.7.19 maven-3.6.1 IDEA 学习前需要掌握: JDBC MySQL Java 基础 Maven Juni ...
- RabbitMQ 入门 (Go) - 4. 使用 Fanout Exchange 做服务发现(上)
到目前为止,我们项目的结果大致如下: 传感器生成的模拟数据(包含传感器名称.数据.时间戳)是通过传感器在运行时动态创建的 Queue 来发送的.这些 Queue 很难直接被发现. 为了解决这个问题,我 ...
- 工具 | Typora + PicGo-Core 自动上传图片到图床
0 前言 Markdown 是现在十分流行的标记式语言,在博客等很多场景中应用十分广泛.众所周知,Markdown 中的图片是以链接的形式存在的,不像 Word 等传统文本编辑器直接把图片嵌入文档中. ...
- Kubernetes 实战 —— 05. 服务:让客户端发现 pod 并与之通信(下)
将服务暴露给外部客户端 P136 有以下三种方式可以在外部访问服务: 将服务的类型设置成 NodePort 将服务的类型设置为 LoadBalance 创建一个 Ingress 资源 使用 NodeP ...
- Azure App Service(一)利用Azure DevOps Pipeline 构建镜像,部署应用程序
一,引言 起因是前两天项目上做测试,需要我把写好的基于.NET 5 的 Web 测试程序作成 Docker 镜像.当我在本地验证完功能后,准备利用 Docker 构建应用程序镜像的时候,发现系统不支持 ...
- istio:在vs中实现ab测试和路径切割
此篇内容 主要目的是总结vs中的match的有关规则和在istio中如何实现路径切割(当下版本1.8.2) 实验demo main.go package main import ( "git ...
- JS复制文本到粘贴板,前端H5移动端点击按钮复制文本
<span id="codeNum">FTYHDSDW</span> <span class=" code-btn" id=&qu ...