曲演杂坛--HASH的一点理解】的更多相关文章

HASH,百度百科上做如下定义: Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值.简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数. 如此生硬的定义很难理解,我们来点看的见的,CHECKSUM就是一种典型的HASH操作 --…
原文:曲演杂坛--一条DELETE引发的思考 场景介绍: 我们有一张表,专门用来生成自增ID供业务使用,表结构如下: CREATE TABLE TB001 ( ID ,) PRIMARY KEY, DT DATETIME ) 每次业务想要获取一个新ID,就执行以下SQL: INSERT INTO TB001(DT) SELECT GETDATE(); SELECT @@IDENTITY 由于这些数据只需保留最近一天的数据,因此建立一个SQL作业来定期删除数据,删除脚本很简单: DELETE TO…
值班期间研发同事打来电话,说应用有超时,上服务器上检查发现有SQL大批量地执行,该SQL消耗IO资源较多,导致服务器存在IO瓶颈,细看SQL,发现自己都被整蒙了,不知道这SQL是要干啥,处理完问题赶紧研究下. SQL类似于: WITH T1 AS ( ) ID , ROW_NUMBER() OVER ( ORDER BY C1 ) AS RID FROM [dbo].[TB002] ) SELECT * FROM T1 ) 第一赶脚是写这代码的研发同事想分页,但是这每页的数据量有点吓人啊(是我太…
群里一个朋友遇到一个TRY CATCH的小问题,测试后发现是自己从来没有考虑的情况,写篇blog加深下印象 --========================================================= 在MSDN上对TRY CATCH有如下描述: 对 Transact-SQL 实现与 Microsoft Visual C# 和 Microsoft Visual C++ 语言中的异常处理类似的错误处理.Transact-SQL 语句组可以包含在 TRY 块中.如果 TRY…
原文来自:http://www.sqlskills.com/blogs/paul/mixed-pages-removed-index-rebuild/ 在SQL SERVER 中,区是管理空间的基本单位,连续的8个页为一分区,分区可分为混合区和统一区(也叫独占区),混合区内存放一个或多个对象的数据,统一区只存放一个对象的数据.为提高空间的利用率,对于新表或索引,会先从混合区上分配页,当表或索引增长到 8 页时,将变成使用统一区进行后续分配. 让我们来测试下 首先,创建测试数据 --=======…
使用ROW_NUMBER来分页几乎是家喻户晓的东东了,而且这东西简单易用,简直就是程序员居家必备之杀器,然而ROW_NUMBER也不是一招吃遍天下鲜的无敌BUG般存在,最近就遇到几个小问题,拿出来供大家娱乐下. ---====================================================== 问题1:为什么加WHERE条件就慢,不加反而快? 查询SQL: WITH Temp AS( SELECT * , ROW_NUMBER()OVER(ORDER BY T2.…
对于中文版的SQL SERVER,默认安装后使用的默认排序规则为Chinese_PRC_CI_AS,在此排序规则下,使用varchar类型来可以“正常存取”存放中文字符以及一些东南亚国家的字符,同时varchar类型在存放英文字符和数字时比nvarchar节省一半的存储空间,因此很多DBA都习惯使用varchar类型来存放字符数据,但这样便存在一些乱码隐患! 首先是特殊字符如上下标或版权字符,测试Code如下: --准备测试表 DROP TABLE TB1 GO CREATE TABLE TB1…
在一次系统优化中,意外发现一个比较“坑”的SQL,拿出来供大家分享. 生成演示数据: --====================================== --检查测试表是否存在 IF(OBJECT_ID('TB2002') IS NOT NULL) BEGIN DROP TABLE TB2002 END GO --============================ --生成测试数据并创建索引 SELECT ,) AS ID, * INTO TB2002 FROM sys.co…
很多刚入门的DBA在捕获阻塞得时候,会问这么一个问题“为什么这个SELECT语句被那个SELECT语句阻塞了,难道不是共享锁么?” 让我们来做个小测试,首先准备一些测试数据: --====================================== --准备测试数据 SELECT ROW_NUMBER()OVER(ORDER BY object_id) AS RID, name AS C1 INTO TB003 FROM sys.all_columns GO CREATE UNIQUE…
通常在我写EXISTS语句时,我会写成IF EXISTS(SELECT TOP(1) 1 FROM XXX),也没细细考究过为什么要这么写,只是隐约认为这样写没有啥问题,那今天就深究下吧! 首先准备测试测试数据 USE [TestDB1] GO CREATE TABLE TB1001 ( ID ,), C1 ), CONSTRAINT PK_TB1001_ID PRIMARY KEY(ID) ) GO CREATE INDEX IDX_ID ON TB1001(ID) GO INSERT INT…