摘要:
经常听说SQL Server最难的部分是性能优化,不禁让人感到优化这个工作很神秘,这种事情只有高手才能做。很早的时候我在网上看到一位高手写的博客,介绍了SQL优化的问题,从这些内容来看,优化并不都是一些很复杂的问题,掌握了基本的知识之后也可以尝试优化自己的SQL程序,甚至是其他相关的程序。优化是一些工作积累之后的经验总结和代码意识,只要平时注意积累,你也可以做优化的工作。这一篇随笔是转载,不过我强... 阅读全文
摘要:
SQL语句是一种集合操作,就是批量操作,它的速度要比其他的语言快,所以在设计的时候很多的逻辑都会放在sql语句或者存储过程中来实现,这个是一种设计思想。但是今天我们来讨论另外一个话题。Sql页提供了丰富的函数供我们使用,还有很多操作有意想不到的结果,今天这个随笔来看看一些不常见到的sql语句。这些语句不像普通的增删查那样平白,它的奇妙之处有时候让人另眼相看。 1. 假设我想把Person.Contact表中所有人的名字用逗号连接起来,串成一个字符串,可能会想到使用游标把FirstName查出来然后逐行赋值给一个字符串变量,可是使用游标的代价是很大的。看看下面的代码:declare @name. 阅读全文
摘要:
渐变维度(SCD)转换提供了一种维护渐变维度或渐变表的方法,渐变维度的分析处理是一个很大的话题。一般一个维度表通常包含一些描述其他信息的离散值,例如,价格,重量,销售地区。问题是如果随着时间的推移这些信息改变我们将如何维护这个表,特别是在数据转移的过程中。例如我们查看AdventureWorks中的product表,如图1图1 通常在联机事务处理(OLTP)数据库中,我们会用一行的数据来保存产品信息。如果产品的售价从10美元上涨到15美元,我们直接更新StandardCost字段为15,这样做完成了任务:现在的售价是多少?但是丢失了历史数据,我们不知道涨价之前的价格是多少?价格上涨了多少?解决 阅读全文
摘要:
提到排名函数我们首先可能想到的是order by,这个是排序,不是排名,排名需要在前面加个名次序号的,order by是没有这个功能的。还可能会想到identity(1,1),它也给了一个序号,但是不能保证给出的序号是连续升序的。除非能够保证所有的Insert语句都能够正确成功地完成,并且没有删除操作,实际的使用中大多数的表都不能保证这样。好在SQL Server中提供了一些排名函数来辅助实现这些功能。排名函数按照需要的顺序对数据进行排名,并提供一个值对数据。下面来了解一下这些排序函数功能。 ROW_NUMBERROW_NUMBER函数允许以上升,连续的顺序给每一行数据一个序号,注意ROW_N 阅读全文
摘要:
透视今天抽一点时间来看看透视和逆透视语句,简单的说就是行列转换。假设一个销售表中存放着产品号,产品折扣,产品价格三个列,每一种产品号可能有多种折扣,每一种折扣只对应一个产品价格。下面贴出建表语句和插入数据语句。 1 create table SalesOrderDetail( 2 ProductID int /*unique多谢wuu00的提醒*/, 3 UnitPriceDiscount float, 4 ProductPrice float 5 ) 6 insert into SalesOrderDetail values 7 (711,.00,12), 8 (711,.00,13), . 阅读全文
摘要:
在模糊查找中我们提到脏数据是怎样进入到表中的事情,主要还是由于一些“Lazy-add”造成的。这种情况我们的肉眼很容易被欺骗,看上去是同一个单词,其实就差那么一个字母,变成了两个不同的单词。一个简单的例子是X-Ray Tech和xRey,我们很有可能认为他们是同一个职务,CT操作员,但是如果让计算机来处理的话,它们是两种截然不同的东西。 和模糊查找一样,模糊分组可以查找出多行中出现的类似的单词进行归类。我们可以使用这些归类得到的结果清洗数据源或者在不修改基础数据的情况下对原表进行修改。模糊分组也需要一个输入字符流,还需要一个OLE DB数据连接,用于存放分析得到的结果。模糊分组任务的编辑界面. 阅读全文
摘要:
BI项目中经常会有一些提取,转换,数据处理(ELT)的工作,其中最主要的是处理过赃数据。假设在项目中我们向数据库中注入了测试数据,但是通过一个外键从另外一个表中载入数据的时候没有对应的数据,那么这一行就是赃数据。这时候可以使用SQL中的Sound-Ex,full-text,相似度算法等方法查找。这种策略需要花费大量的时间和精力来设计算法,测试,维护,并且它们都是基于词汇的,复用的可能性很小。也可能你会放弃自己处理并把它抛给一些有经验的高手专家来做这些工作,也可能你会在表中添加一些新的数据已达到外健关联的目的,但是这种方法被称作Lazy-add(懒惰的做法)。因为是手工添加数据难免会带来拼写错误 阅读全文
摘要:
和关键词提取一样,关键词查找使用相同的算法和统计模型将输入流中的字符串按照名词或者名词词组进行统计,不同的是它参照一个已经存在的词汇表,输出的统计结果也仅限于这个词汇表中的关键词。关键词提取和关键词查找可以搭配使用。定期地使用关键词提取来产生关键词词汇表,也可以在这个词汇表中人为删除或添加想要统计的关键词,最后使用关键词查找来产生最终的统计结果。在上一个章节中我们将统计结果中的“model”从统计结果中删除,然后我们可以将他们整理出来,然后删除重复的,添加一些对有统计价值的关键词。这里假设我们想统计有哪些模型招致客户的不满以致留言评价,但是我们想只保留模型的名称,而不是类似“model XX- 阅读全文
摘要:
如果你曾经为网站做过单词或短语分析以便获得更好的搜索排名,你会对SSIS的这个任务很感兴趣。关键词提取任务是从文本流中查找并计算关键词的出现频率的工具。它可与接收任何形式的文本,输出两列:一列是关键词,另一列是这个关键词在文本中出现的频率的统计值。这个统计值可以是该关键词出现的次数,也可以是使用稍微复杂一点的计算公式(TFIDF)计算得出的几率值。缩写词TFIDF的全称是Term Frequency and Inverse Document Frequency,是一个用于计算单词或词组在在整个文本中出现的几率。下面是这个公式的表达式:TDIDF (of a term or phrase) = 阅读全文
摘要:
今天在一个存储过程中看见了merge这个关键字,第一个想法是,这个是配置管理中的概念吗,把相邻两次的更改合并到一起。后来在technet上搜索发现别有洞天,原来是另外一个sql关键字,t-sql的语法还是相当地丰富的。本篇是一篇学习笔记,没有什么新意,这里给出technet上的地址连接供大家参考权威:http://technet.microsoft.com/zh-cn/library/bb510625.aspx,这里具体的语法不去深究了,只是把几个例子实际运行,剖析一番。 使用merge同时执行insert和update操作我们经常会有这样的需求,根据某个字段或多个字段查找表中的一行或多行数据 阅读全文