Pages: 9/12 First page Previous page 1 2 3 4 5 6 7 8 9 10 11 12 Next page Final page [ View by Articles | List ]
Jun 19
Highslide JS
BI
确切地讲,BI并不是一项新技术,它将数据仓库(DW)、联机分析处理(OLAP)、数据挖掘(DM)等技术与客户关系管理(CRM)等结合起来 应用于商业活动实际过程当中,实现了技术服务于决策的目的;Mark Hammond从管理的角度看待BI,认为BI是从“根本上帮助你把公司的运营数据转化成为高价值的可以获取的信息(或者知识),并且在恰当的时间通过恰 当的手段把恰当的信息传递给恰当的人”。

ETL
ETL即数据抽取(Extract)、转换(Transform)、装载(Load)的过程。它是构建数据仓库的重要环节。数据仓库是面向主题 的、集成的、稳定的且随时间不断变化的数据集合,用以支持经营管理中的决策制定过程。数据仓库系统中有可能存在着大量的噪声数据,引起的主要原因有:滥用 缩写词、惯用语、数据输入错误、重复记录、丢失值、拼写变化等。即便是一个设计和规划良好的数据库系统,如果其中存在着大量的噪声数据,那么这个系统也是 没有任何意义的,因为“垃圾进,垃圾出”(garbage in, garbage out),系统根本就不可能为决策分析系统提供任何支持。为了清除噪声数据,必须在数据库系统中进行数据清洗。目前有不少数据清洗研究和ETL研究,但是 如何在ETL过程中进行有效的数据清洗并使这个过程可视化,此方面研究不多。


联机事务处理OLTP
联机分析处理 (OLAP) 的概念最早是由关系数据库之父E.F.Codd于1993年提出的,他同时提出了关于OLAP的12条准则。OLAP的提出引起了很大的反响,OLAP作为一类产品同联机事务处理 (OLTP) 明显区分开来。
当今的数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支 持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
OLAP是使分析人员、管理人员或执行人员能够从多角度对信息进行快速、一致、交互地存取,从而获得对数据的更深入了解的一类软件技术。OLAP的目标是满足决策支持或者满足在多维环境下特定的查询和报表需求,它的技术核心是"维"这个概念。
Jun 12

 聚集索引的区别

  聚集索引:物理存储按照索引排序

  非聚集索引:物理存储不按照索引排序

优势与缺点

聚集索引:插入数据时速度要慢(时间花费在“物理存储的排序”上,也就是首先要找到位置然后插入),查询数据比非聚集数据的速度快

聚集索引的区别

  聚集索引:物理存储按照索引排序

  非聚集索引:物理存储不按照索引排序

优势与缺点

聚集索引:插入数据时速度要慢(时间花费在“物理存储的排序”上,也就是首先要找到位置然后插入),查询数据比非聚集数据的速度快

索引是通过二叉树的数据结构来描述的,我们可以这么理解聚簇索引:索引的叶节点就是数据节点。而非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。如下图:

非聚集索引

Jun 8
当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。
即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。
当 SET NOCOUNT 为 ON 时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft? SQL Server? 提供的实用工具(QA)执行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、UPDATE 和 DELETE)结束时将不会在查询结果中显示”nn rows affected”。
如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。
SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。
如果存储过程中有多个语句,则默认情况下,SQL Server在每个语句完成时给客户端应用程序发送一条消息,详细说明每个语句所影响的行数。大多数应用程序不需要这些消息。如果确信应用程序不需要他们,可以禁用这些消息,以提高慢速网络的性能。我们就可以通过SET NOCOUNT会话设置为应用程序禁用这些消息。(其实大部分应用程序都不需要这个值)
需要注意的是:
1.存储过程:
象create table返回了记录集,而且连insert into语句也返回了记录集,不过该记录集得一种特别的记录集(没有字段,不能对该记录集进行任何操作), OLEDB和ODBC存在一个很大的差别,向odbc取记录集时,odbc过滤了上面所称的特殊记录集(那种只占位置但不能进行任何操作的记录集——多由create table或insert into产生),而向oledb取记录集时,oledb并没有将特殊记录集过滤。所以在使用存储过程返回记录集时,在不希望返回记录的地方,应该使用set nocount on禁止存储过程返回记录集,否则可能会绕很多弯路。
2.触发器:
    建议不要让触发器返回任何结果。这是因为对这些返回结果的特殊处理必须写入每个允许对触发器表进行修改的应用程序中。为了阻止从触发器返回任何结果,不要在触发器内定义包含SELECT语句或变量赋值。如果必须在触发器中进行变量赋值,则应该在触发器的开头使用SET NOCOUNT ON语句以避免返回任何结果集。
    今天我就遇到了触发器返回结果集,造成对触发器表删除出错,如果是删除一条记录可以,多条则不行,提示:Key column information si insufficient or incorrect.Too many rows were affected by update.
Jun 3
Highslide JS
需要合并一个数据表的一列,如何做呢,上图已经说明,下面是具体的T-SQL代码了
Apr 16



只要排序字段是索引字段则查询速度就会很快 写排序字段的时候不能忽略ASC 如:

以上是错误的写法 下面这样写才是正确的
Apr 16
今天优化一个存储过程,尝试建索引,在使用临时表和表变量时纠结了一番,看到一个园子写的文章不错,大家一起来深入理解下“临时表”和“表变量”!
在开发过程中,经常会遇到使用表变量和本地临时表的情况。下面是对二者的一个介绍:

1. 为什么要使用表变量

表变量是从2000开始引入的,微软认为与本地临时表相比,表变量具有如下优点:
  a.与其他变量的定义一样,表变量具有良好的定义范围,并会被自动清除.(Table variables go out of scope at the end of batch, while temp table destory when the connection closed)
  b.在存储过程中使用表变量会减少存储过程重新编译的发生;
  c.表变量需要更少的锁请求和日志资源;
  d.可以在表变量上使用UDF,UDDT,XML。

2.表变量的限制

与临时表相比,表变量存在着如下缺点:
  a.在表变量上没有统计信息,查询优化器根据固定的预估值来选择执行计划,在数据很多的情况下,会导致查询优化器选择很差的执行计划;
  b.不能直接在表变量上创建索引,但可以通过创建约束(主键、唯一)来建立索引;
  c.在DECLARE后,不能再对表变量进行更改;(couldn't make any chances to the definition of a table variable once it's declared)
  d.不能对表变量执行INSERT EXEC,SELECT INTO语句;
  e.不能通过EXEC或sp_executesql来执行牵涉到表变量的动态SQL语句,但如果表变量是在动态SQL语句内定义的,则可以。

3.那什么时候可以使用表变量
Temp tables are the better choice for tables with large change of rows that benifit from nonclustered indexes or when you need to use the table after the batch is done.
要使用表变量应该根据如下规则来判断:
  a.表的行数;
  b.使用表变量能够减少的重新编译次数;
  c.查询的类型和对索引或者统计信息的依赖程度;
  d.需要生用UDF,UDDT,XML的时候。
其实也就说,得从实际出发,根据具体的查询,作出具体的选择。但是,其中很关键的一点,如果表的行数非常多,使用表变量其实是更费资源的。有人提出了这样的建议:对于行数较少的情况下(小于1000行)可以使用表变量;如果行数很多(有几万行),则使用临时表。
因此,在实际的开发中,应通过分别使用临时表或表变量进行对比后,才作出决定。
下面是一个例子,插入临时表和表变量的数据有20多万行,可以看到,使用临时表的时
间是使用表变量所花时间的1/5。

表 'SalesOrderHeader'。扫描计数 3,逻辑读取 130 次,物理读取 9 次,预读 43 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 '#SalesOrderDetail___________________________________________________________________________________________________00000000001F'。扫描计数 3,逻辑读取 12331 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

SQL Server 执行时间:
   CPU 时间 = 2281 毫秒,占用时间 = 19726 毫秒。
select with temporary table: 20140 ms

********************************************************************************

表 'SalesOrderHeader'。扫描计数 0,逻辑读取 764850 次,物理读取 17 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 '#4E88ABD4'。扫描计数 1,逻辑读取 12331 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

SQL Server 执行时间:
   CPU 时间 = 4375 毫秒,占用时间 = 107160 毫秒。
select with table variable: 107160 ms
Apr 15
ps:常见的web开发和企业级开发中常常要用到job来实现各种数据的同步、核对等等,job是一个定时执行的动作单元,我姑且这么理解,可以通过多种方法实现,这里讲解的是在mssql server中的实现方法,一起来看!

通过本文你将了解:
1、如何搞定一个job;
2、如何查看一个job的执行情况!(文章下方)

命令创建方式

Quotation

创建JOB
SQL> variable job1 number;
SQL>
SQL> begin
2    sys.dbms_job.submit(:myjob,
3                        'day_update;',
4                        sysdate + 1 / 1440,--每天1440分钟,即一分钟运行过程一次
5                        'sysdate+1/1440');
6
7 end;

---------------

运行JOB
SQL> begin
2 dbms_job.run(:myjob);
3 end;
4 /

删除JOB
SQL> begin
2 dbms_job.remove(:myjob);
3 end;
4 /

常有的设置Interval的方法:

    2 每天固定时间运行,比如早上8:10分钟:Trunc(Sysdate+1) + 8/24+10/1440

    ² 每天:trunc(sysdate+1)

    ² 每周:trunc(sysdate+7)

    ² 每月:trunc(sysdate+30)

    ² 每个星期日:next_day(trunc(sysdate),'SUNDAY')

    ² 每天6点:trunc(sysdate+1)+6/24

    ² 半个小时:sysdate+30/1440

需要注意的是,在submit方法的前面一定要先定义job这个变量,另外,submit方法的第二个参数是一个存储过程的名,记得在后面添加“:”号,在next_date是一个时间类型变量而不是一个字符串,所以需要注意不要把它当成字符串,不需要对该参数加引号。最后一个参数interval是一个字符串类型,记得添加引号

视图状态下创建方式

Highslide JS
如果在SQL Server 里需要定时或者每隔一段时间执行某个存储过程或3200字符以内的SQL语句时,可以用管理->SQL Server代理->作业来实现。

◆1、管理->SQL Server代理->作业(按鼠标右键)->新建作业->

◆2、新建作业属性(常规)->名称[自定义本次作业的名称]->启用的方框内是勾号->

分类处可选择也可用默认的[未分类(本地)]->所有者默认为登录SQL Server用户[也可选其它的登录]->

描述[填写本次工作详细描述内容];

[ 创建作业分类的步骤:

SQL Server代理->作业->右键选所有任务->添加、修改、删除 ]

◆3、新建作业属性(步骤)->新建->步骤名[自定义第一步骤名称]->类型[Transact-SQL(TSQL)脚本]->

数据库[要操作的数据库]->命令

[如果是简单的SQL直接写进去即可,也可用打开按钮输入一个已写好的*.sql文件

如果要执行存储过程,填
Apr 11
--聚合函数
use pubs
go
select avg(distinct price) --算平均数
from titles
where type='business'
go
use pubs
go
select max(ytd_sales) --最大数
from titles
go

use pubs
go
select min(ytd_sales) --最小数
from titles
go

use pubs
go
select type,sum(price),sum(advance) --求和
from titles
group by type
order by type
go

use pubs
go
select count(distinct city) --求个数
from authors
go

use pubs
go
select stdev(royalty) --返回给定表达式中所有值的统计标准偏差
from titles
go

use pubs
go
select stdevp(royalty) --返回表达式中所有制的填充统计标准偏差
from titles
go

use pubs
go
select var(royalty) --返回所有值的统计方差
from titles
go

use pubs
go
select varp(royalty) --返回所有值的填充的统计方差
from titles
go
Pages: 9/12 First page Previous page 1 2 3 4 5 6 7 8 9 10 11 12 Next page Final page [ View by Articles | List ]