小编gbn*_*gbn的帖子

Uniqueidentifier PK:SQL Server堆是正确的选择吗?

好.我已经在这里和那里读过关​​于SQL Server堆的东西,但没有什么太明确的真正指导我.我将尝试衡量绩效,但希望能就我应该研究的内容提供一些指导.这是SQL Server 2008 Enterprise.以下是表格:

工作

  • JobID(PK,GUID,外部生成)
  • StartDate(datetime2)
  • 帐户ID
  • 几个会计字段,主要是小数和bigints

JobSteps

  • JobStepID(PK,GUID,外部生成)
  • JobID FK
  • 开始日期
  • 几个会计字段,主要是小数和bigints

用法:大量插入(数百/秒),每个作业通常为1个JobStep.估计每月可能有100-200M行.根本没有更新,唯一的删除来自3个月以前的归档数据.

对数据执行~10次查询/秒.有些人将JobSteps加入乔布斯,有些人只看乔布斯.几乎所有查询都在StartDate上,其中大多数包括AccountId和一些其他会计字段(我们有它们的索引).查询非常简单 - 执行计划的最大部分是JobSteps的连接.

优先级是插入性能.有些滞后(大约5分钟左右)可以容忍数据出现在查询中,因此复制到其他服务器并运行查询肯定是允许的.

除了将JobSteps加入Jobs之外,基于GUID的查找非常罕见.

当前设置:没有聚集索引.唯一一个似乎是候选者的是StartDate.但是,它并没有完美地增加.可以在StartDate后的3小时窗口中将作业插入任何位置.这可能意味着按照非最终的顺序插入了一百万行.

使用我当前索引的1 Job + 1 JobStepId的数据大小约为500字节.

问题:

  • 这是一个很好用的堆?

  • 群集在StartDate上有什么影响,当它几乎是非连续的~2小时/ 100万行?我的猜测是不断的重新排序会杀死插入性能.

  • 我是否应该添加bigint PK只是为了拥有更小,总是增加的密钥?(我仍然需要guid进行查找.)

我将GUID作为PRIMARY KEYs和/或集群键读取,它似乎表明即使发明密钥也会在其他索引上节省大量空间.另外一些资源表明堆通常存在某种性能问题,但我不确定它是否仍然适用于SQL 2008.

再次,是的,我将尝试进行测试和测量.我只是想获得一些指导或链接到其他文章,这样我就可以考虑哪些路径做出更明智的决定.

sql sql-server indexing performance sql-server-2008

4
推荐指数
1
解决办法
985
查看次数

表值函数我的查询计划在哪里?

我刚刚在SQLServer 2000上的表值函数中包装了一个复杂的SQL语句.当查看SELECT*FROM dbo.NewFunc的查询计划时,它只是给我一个我创建的表的表扫描.

我猜这是因为table是在tempdb中创建的,我只是从中选择.

所以查询很简单:

SELECT * FROM table in tempdb
Run Code Online (Sandbox Code Playgroud)

我的问题是:

UDF是否使用与复杂SQL语句相同的计划?

如何调整此UDF的索引?

我能看到真正的计划吗?

sql t-sql sql-server sql-server-2000 user-defined-functions

4
推荐指数
1
解决办法
1911
查看次数

如何确定列大小是以字节为单位还是以列元数据中的字符为单位?

我正在开发一些软件,它必须临时在各种数据库(Oracle、DB2、SQLServer)中创建虚拟条目。该行中的每一列都填充有随机数据。

该代码使用 java 中的 java.sql.DataBaseMetaData 类来获取 COLUMN_SIZE 属性,以计算出要在 VARCHAR2 和其他字符串列类型中存储的随机字符串的大小。

DatabaseMetaData metadata = connection.getMetaData();
while (resultSet.next()) {
  ResultSet resultSet = metadata.getColumns(...);
  int size = resultSet.getInt("COLUMN_SIZE");
}
Run Code Online (Sandbox Code Playgroud)

问题是,至少在 Oracle 中,我似乎无法弄清楚列长度是以字节还是字符形式返回的。此外,根据编码的不同,字符的字节数也不同。将所有这些结合起来,我收到一些 SQL 错误,因为尝试插入的字符串太大。我错过了一些明显的东西吗?

java sql sql-server oracle db2

4
推荐指数
1
解决办法
4111
查看次数

SQL 2008存储过程中的可选where子句/参数?

我正在写一些更新表的代码.根据用户想要做的事情,它可以更新大量记录,也可以更小.描绘因子是组ID.

用户可以选择是更新所有记录的表,还是仅更新具有该groupID的记录.我想对两个实例使用相同的存储过程,可能有一点逻辑来区分这些场景.(我不想用90%相同的代码编写两个存储过程.)

我不是存储过程的专家,我不确定是否可以传入可选参数,或者如何动态生成where子句的一部分,具体取决于groupID是否存在.欢迎任何建议.

谢谢!

sql sql-server stored-procedures optional-parameters sql-server-2008

4
推荐指数
1
解决办法
5235
查看次数

在SQL中,如何在参数中允许空值?

我有一个看起来很简单的SQL查询,我无法弄清楚,它让我疯狂.这是SQL 2008.基本上,有一个状态字段,可以选择"挂起","满意"或全部.如果他们发送"待定"或"满意",则没有问题.但当他们选择所有我遇到问题时.主要是因为我无法弄清楚如何获取此字段为空的记录(因为它必须是'is null'而不是'= null'.(这是数据将来的方式;我无法控制.)

我一直在使用的代码不适用于null.

SELECT*FROM Payment_Table,其中Payment.Status_code = @status_id

sql t-sql sql-server null sql-server-2008

4
推荐指数
1
解决办法
4379
查看次数

在SQL Server 2008中从单行设置多个标量变量?

在触发器中,我有以下代码:

SET @var1 = (SELECT col1 FROM Inserted);
SET @var2 = (SELECT col2 FROM Inserted);
Run Code Online (Sandbox Code Playgroud)

是否可以将上述内容写入一行?概念上喜欢的东西:

SET (@var1,@var2) = (SELECT col1,col2 FROM Inserted);
Run Code Online (Sandbox Code Playgroud)

显然,我尝试了上述方法,没有成功; 我只是坚持使用第一种方法吗?

即使可能,这是一个好主意吗?

谢谢!

sql t-sql sql-server sql-server-2008

4
推荐指数
1
解决办法
2383
查看次数

如何防止超出范围的日期时间值错误?

我正在从c#应用程序传递一个特殊的Insert语句到sql server 2000/2005.有时,如果机器(安装了sql server)的datetime格式与我传入的不同,则会抛出错误.

例如:在插入声明中,我传递的是"2010-03-10 00:00:00-05:00",但机器区域日期设置不同.我收到这个错误: -

将char数据类型转换为datetime数据类型会导致日期时间值超出范围.

我可以在c#的Insert语句中传递一些通用日期格式,它与任何机器的区域日期时间设置完美配合.

c# t-sql sql-server datetime sql-server-2005

4
推荐指数
1
解决办法
5122
查看次数

数百个数据库sql server日志发货

SQL Server 2005 Standard 64x,目前有300多个小型数据库(每个5MB),用户群根据需要添加数据库.想要实现热备份的日志传送,而不是通过向导,因为它看起来像每个日志传送的数据库添加3个作业(主要1个,次要2个).

我是否尝试自己编写或使用Quest的LiteSpeed之类的东西?或者我是否因为有数百个SQL Server代理作业并且所有这些作业都被解雇而感到非常苛刻(或者更糟糕的是,我是否必须尝试计时)?

欢迎所有建议.

sql-server sql-server-2005 log-shipping

4
推荐指数
1
解决办法
1894
查看次数

TSQL:在单个表中查找唯一条目

考虑一个如下结构的表格或CTE:

Name    Num
----    ----
Abc     12
Abc     12
XYZ     70
XYZ     80
XYZ     85
Bar     50
Bar     55
Foo     44
Foo     44
Baz     88
Run Code Online (Sandbox Code Playgroud)

要求是确定的名称,其中多个不同的订购数量存在.

期望的结果集是

Name   
----
XYZ     
Bar     
Run Code Online (Sandbox Code Playgroud)

您将使用什么TSQL语句来派生此结果集?

更新:确实,给定名称可能有2个以上的条目.

sql t-sql sql-server aggregate unique

4
推荐指数
1
解决办法
163
查看次数

SQL插入多语言数据 - 丢失变音符号等

将多语言数据插入SQL 2008数据库(nvarchar字段)我注意到它似乎丢失了一些特殊的字符标记.

例如

    INSERT INTO [dbName].[dbo].[tbl_Question_i18n]  
           ([QuestionId]  
           ,[LanguageId]  
           ,[QuestionText])  
     VALUES  
           (@lastinsertedquestionid  
           ,@romanian  
           ,'Num?r unic de referin?? (URN)')  
Run Code Online (Sandbox Code Playgroud)

插入为'Numar unic de referinta(URN)'

虽然如果我"编辑前200行",我可以将相同的文本直接粘贴到该字段中,没有任何问题.

我错过了什么?

sql t-sql sql-server unicode nvarchar

4
推荐指数
1
解决办法
2033
查看次数