BI-SQL丨WITH NOLOCK

news2024/11/17 1:46:19

WITH(NOLOCK)

企业在搭建数仓的时候,对于数仓的负载性能和运行速度都是纳入考量标准的。特别是并发性较高的情况下,如何规避因用户使用量较多而导致死锁卡死的问题呢?其实,这些可以通过WITH(NOLOCK)来解决。

WITH(NOLOCK)顾名思义,不锁的意思。它的目的是为了避免因为查询表,而导致表被锁死,从而提高查询的速度。

WITH(NOLOCK)有两个特点:

1.使用WITH(NOLOCK)查询时,不会被其他排他锁阻拦;

2.使用WITH(NOLOCK)查询时,不会发布锁,阻拦其他事务操作。

概念延申

当数据库中并发较高的时候,容易出现以下几类现象:

  • **脏读:**指某张表,被A管理员读取访问,并且进行了修改,但是还没有进行提交操作;而同时B管理员也读取了这个数据,这种情况下,B读到的是未更新的数据,也被称为脏数据。依据脏数据进行后续的操作,肯定是不对的。

  • **不可重复读:**指的是某个事务中,多次对某张表进行读取操作,在A事务进程还没结束的情况下,B事务对数据进行了修改,这样A事务两次读取到的数据不一致,这种情况就是不可重复读。

PS:通常发生在两个SQL工程师,同时开发的过程中。

  • **幻读:**一个事务查询某张表,两次读取到的数据总量不一致,这种情况下就称为幻读。

数据库为了避免上述的三种情况,有4种特殊的隔离机制,分别是:Read uncommitted(读未提交),Read committed(读已提交),Repeatable read(可重复读),Serizable(序列化)。

4种机制可解决的场景如下:

类型脏读不可重复读幻读
Read  uncommitted
Read  committed
Repeatable  read
Serizable
看到这里,可能小伙伴们会很懵,为什么会讲到这里?

因为WITH(NOLOCK)的效果,等同于Read uncommitted,使用了WITH(NOLOCK)虽然可以解决并发导致的性能问题,但是会导致脏读、不可重复读、幻读这三种情况的产生。

虽然使用WITH(NOLOCK)会导致各种问题,但是并不代表其无用,它的使用场景有如下三种:

  1. 数据的使用场景是允许脏数据存在的情况,例如:A和B同时对某张表进行修改操作,但是A和B谁提交都行,且提交一次,另外的人就不允许提交了或者允许多次修改。

  2. 如果只追求性能,不考虑数据安全性,那么可以使用此方法。

  3. 历史数据或不允许进行修改的事实表,可以使用此方法提高查询性能。

使用实例

例子:

查询数据库中的某张表,使用WITH(NOLOCK)。

SELECT TOP (1000) [Date]
      ,[Year]
      ,[Quarter]
      ,[Month]
      ,[Day]
      ,[DATEKEY]
  FROM [CaseData].[dbo].[Dim_Date] WITH(NOLOCK)

结果如下:

这里是白茶,一个PowerBI的初学者。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/707500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql进阶(三)之索引篇

文章目录 前言索引介绍1.什么是索引?2.优缺点3.什么时候需要 / 不需要索引?4.语法 索引底层结构1.Hash表2.BTree 索引分类1.按字段特性2.按物理存储3.按字段个数 索引优化1.SQL性能分析2.索引失效3.常见索引优化方法 前言 以面试题驱动索引的学习&#…

go-zero的配置及gorm、自定义返回等的引入以及扩展

工程维度(摘自官网) . ├── consumer ├── go.mod ├── internal │ └── model ├── job ├── pkg ├── restful ├── script └── service consumer: 队列消费服务internal: 工程内部可访问的公共模块job&a…

MMYOLO框架标注、训练、测试全流程(补充篇)

前言 MMYOLO框架是一个基于PyTorch和MMDetection的YOLO系列算法开源工具箱。MMYOLO定位为YOLO系列热门开源库以及工业应用核心库,MMYOLO框架Github项目地址支持的任务:目标检测、旋转目标检测支持的算法:YOLOv5、YOLOX、RTMDet、RTMDet-Rota…

使用 okhttp3库发送 get、post(json参数传递,form表单提交) java代码实现

OkHttp是一个开源的HTTP客户端,由Square公司开发。OkHttp3是OkHttp库的最新版本。它提供了一个简单而强大的API来处理网络通信。以下是OkHttp3库的一些主要特点: 与Android平台完全兼容:OkHttp3可以与标准的Java库一起使用,也可以…

【前端】导航栏html(ul+li)/css/js(jq)

引入jq <script src"https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script> css代码 <style>ul {list-style: none;margin: 0;padding: 0;}li {cursor: pointer;}.color-white {color: #FFFFFF !important;background-color: rgb…

git 报错 fatal: Authentication failed的解决

git提交代码的时候&#xff0c;报错 remote: Support for password authentication was removed on August 13, 2021. remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for informa…

三个好基友Cookie、Session和Token

原创声明&#xff0c;转载请注明文章链接来源、作者信息 >三个好基友Cookie、Session和Token hello&#xff0c;我是索奇~ 精心写了一篇Cookie、Session和Token的 vivid 文章&#xff0c;并分享给大家 我们可以把Cookie、Token和Session看作是三个好基友&#xff0c;它们…

Linux中创建sftp用户并限制目录权限

注意两点&#xff1a; 一是禁止该用户通过ssh登录&#xff0c;二是不需要创建家目录。家目录简单来说&#xff0c;就是在/home下的用户命令&#xff0c;默认每个用户在/home中都是有与用户名一样的文件夹。 1.创建组 groupadd sftp 2. 创建用户 useradd -g sftp -s /sbin/…

Vue3 JSX 插槽、v-model 的用法以及 React JSX 的区别

前言 写这篇文章的初衷是&#xff0c;Vue3 JSX 部分与 React JSX 容易混淆&#xff0c;比如如本文所说的 slot & v-model&#xff0c; 如果你是第一次接触 JSX&#xff0c;可先阅读前面写过的 React & JSX 日常用法与基本原则 来对 JSX 有一个整体的认知以及比较两者间…

如何了解(海外抖音TiKToK)与国内抖音的区别以及介绍

一、海外抖音TK平台的优势 自从抖音在中国大受欢迎后&#xff0c;海外也推出了海外版抖音TK平台。尽管两者都是视频分享平台&#xff0c;但它们在一些方面具有明显的区别和独特的优势。下面将详细介绍海外抖音TK平台的优势以及与国内抖音的区别性。 优势&#xff1a; 1. 多元…

9-2 小波滤波器、去噪、增强、变换(matlab程序)

1.简述 小波去噪滤波算法是一种基于小波变换的滤波方法&#xff0c;它通过对信号进行小波变换来分解信号的频率分量&#xff0c;并根据信号的特点选择合适的阈值处理方法来去除噪声。该算法的主要思想是将信号分解成多个频率分量&#xff0c;根据信号的特点选择合适的阈值处理…

【IMX6ULL驱动开发学习】13.Pinctrl子系统与GPIO子系统

上一篇博客中&#xff0c;已经实现了设备树的添加 【IMX6ULL驱动开发学习】12.Linux驱动之设备树 这篇博客介绍Pinctrl子系统与GPIO子系统的使用 Pinctrl子系统参考文档&#xff1a; 内核文档链接&#xff1a;https://www.kernel.org/doc/Documentation/ 内核源码doc&#xff…

AD23 原理图选中元件在PCB中高亮显示

概述 项目需要&#xff0c;再次使用AD&#xff0c;在此做个笔录。 1、原理图界面 2、在原理图界面选中电容后&#xff0c;对应的PCB界面该电容高亮显示 3、总结 希望能帮助到有需要的攻城狮。

Linux查看日志常用操作整理

项目出现异常&#xff0c;要定位问题&#xff0c;查看日志是最常用的方法&#xff0c;在Linux系统查看一些日志文件&#xff0c;我们一般会使用tail、cat等命令&#xff0c;下面总结归纳一下这些常用的命令。 1、查看日志的方法 tail&#xff1a;tail命令应该是使用最多的&am…

探讨绿色照明与智能照明节能控制系统应用

张心志 安科瑞电气股份有限公司 上海嘉定 201801 【摘 要】随着社会经济的不断发展&#xff0c;人们对生活质量、环境品质越发重视。积极推广绿色智能照明&#xff0c;提高城市照明质量&#xff0c;对于改善人们居住环境意义重大。文章简要介绍了绿色照 明的基本要求、室内智…

互联网编程之简单邮箱发送程序

需求是使用Java写一个简单的邮箱发送程序。 注意需要到QQ邮箱的设置-账户中开启服务。 package org.example;import org.apache.commons.mail.Email; import org.apache.commons.mail.EmailException; import org.apache.commons.mail.SimpleEmail;public class Main {public …

ospf-interface-fsm-and-neighbor-fsm

/* Interface State Machine */ struct {int (*func) (struct ospf_interface *);int next_state; } ISM [OSPF_ISM_STATE_MAX][OSPF_ISM_EVEN

网络安全技术入门(1):简介

文章目录 1.前言2.什么是网络安全技术&#xff1f;3.列举一些常见的网络安全技术3.1 防火墙3.2 加密技术3.3 身份认证和访问控制3.4 恶意软件防护3.5 网络监控和日志管理3.6 威胁情报和漏洞管理3.7 安全培训和意识教育 4.网络安全研究的关键技术5.网络安全防护技术有哪些&#…

计算机网络 - 应用层http协议 - http报文格式介绍(1)

前言 本篇认识和理解应用层中的http协议&#xff0c;了解抓包工具并进行使用&#xff0c;认识请求报文与响应报文&#xff0c;了解报文中基本键值对意思例如&#xff1a;Set-Cookie, 状态码等&#xff0c;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#…

segement and remove-SAM一键清除物体(代码安装实战项目)

结果展示 去除图片中前景物体的步骤: 1.框选 2.分割 3.分离 4.去除 项目介绍 一键帮你剔除视频内的物体,现在只需要一句话。使用Meta的SAM技术,你现在可以让视频内任意物体消失! 特点 按照提示进行分割:只需输入“黑色狗”,您就可以将您的黑色狗分割出来; 修复图…