Questions tagged «sql-server»

所有版本的Microsoft SQL Server(非MySQL)。还请添加特定于版本的标记,例如sql-server-2016,因为它通常与问题相关。

3
使用SSD时,数据库设计中的聚集索引概念是否明智?
在设计SQL Server数据架构和后续查询,存储过程,视图等时,对于明确要部署在SSD平台上的数据库设计,聚集索引的概念和磁盘上数据的顺序是否有意义? “ http://msdn.microsoft.com/zh-cn/library/aa933131(v=sql.80).aspx “聚集索引确定表中数据的物理顺序。” 在物理磁盘平台上,考虑到它们的设计对我来说很有意义,因为对数据进行物理扫描以检索“顺序”行比在表中查找更有效。 在SSD平台上,所有数据读取访问都使用相同的查找。就位存储在同一块硅片而言,没有“物理顺序”的概念,并且数据读取不是“顺序的”。 那么,在设计应用程序数据库的过程中,聚集索引的考虑是否与此平台相关? 我最初的想法不是因为“有序数据”的概念不适用于SSD的存储和查找/恢复优化。 编辑:我知道SQL Server 将创建一个,我只是在思考在设计/优化过程中考虑它是否有意义。

9
要求不要使用事务并使用替代方法来模拟事务
我从事T-SQL的开发已经有好几年了,并且一直在不断深入研究,继续学习有关该语言各个方面的所有知识。我最近开始在一家新公司工作,收到了我认为关于交易的奇怪建议。永远不要使用它们。而是,使用一种模拟交易的解决方法。这来自于我们的DBA,该DBA在一个数据库中处理大量事务,并随后进行大量阻塞。我主要工作的数据库没有出现此问题,并且我看到过去使用过事务。 我了解交易会受到阻碍,因为这样做本质上就是这样做的,如果您不使用任何交易就可以逃脱,那就一定要这样做。但是在很多情况下,每个语句必须成功执行。如果失败了,那么所有人都必须提交。 我一直将交易范围保持在尽可能狭窄的位置,始终与SET XACT_ABORT ON结合使用,并且始终在TRY / CATCH中使用。 例: CREATE SCHEMA someschema; GO CREATE TABLE someschema.tableA (id INT NOT NULL IDENTITY(1, 1) PRIMARY KEY, ColA VARCHAR(10) NOT NULL ); GO CREATE TABLE someschema.tableB (id INT NOT NULL IDENTITY(1, 1) PRIMARY KEY, ColB VARCHAR(10) NOT NULL ); GO CREATE PROCEDURE someschema.ProcedureName @ColA …

6
可以在一台SQL服务器上放置的数据库数量有限制吗?
我正在建立一个SaaS系统,我们打算在该系统中为每个客户提供他们自己的数据库。该系统已经设置好,因此如果负载太大,我们可以轻松地扩展到其他服务器。我们希望拥有成千上万的客户。 问题 在一个SQL Server上可以/应该具有的微数据库数量是否有实际限制? 它会影响服务器的性能吗? 拥有10,000个每个100 MB的数据库或一个1 TB的数据库是否更好? 附加信息 当我说“微数据库”时,我并不是真的意思是“微”。我只是说我们的目标是成千上万的客户,因此每个单独的数据库仅占总数据存储量的千分之一或更少。实际上,每个数据库的容量大约为100MB,这取决于它获得的使用量。 使用10,000个数据库的主要原因是可伸缩性。事实是,系统的V1有一个数据库,当数据库承受负载时,我们经历了一些不舒服的时刻。 所有这些都使CPU,内存,I / O紧张。即使我们解决了这些问题,他们也使我们意识到,即使在世界上索引最佳的情况下,如果我们如希望的那样成功,我们也无法将所有数据都放在一个巨大的鸿沟中的数据库。因此,对于V2,我们正在分片,以便可以在多个数据库服务器之间分配负载。 去年,我花了很多时间来开发这种分片解决方案。每个服务器一个许可证,但是由于我们在Azure上使用VM,因此无论如何都要照顾好它。之所以出现这个问题,是因为以前我们只向大型机构提供服务,并且自己建立每个机构。我们的下一个业务是自助服务模型,任何使用浏览器的人都可以注册并创建自己的数据库。与大型机构相比,他们的数据库将更小,数量更多。 我们尝试了Azure SQL数据库弹性池。性能非常令人失望,因此我们切换回常规VM。

5
什么时候可以收缩数据库?
我知道收缩是魔鬼:它会颠倒页面顺序,并导致皮肤癌,数据碎片和全球变暖。清单还在继续……也就是说,我有一个100 GB的数据库,我删除了50 GB的数据-不是在一个表上,而是在数据库范围内对旧数据进行一般修剪,覆盖了90%的数据。表-这是否构成缩小数据库的合适用例? 如果不是,那么从数据库中删除如此高的数据百分比后,应采取哪些适当的步骤来清理房屋?我可以想到两个:重建索引和更新统计信息。还有什么?


5
SQL Server中的数据混淆
SQL Server中数据混淆的最佳实践是什么? 我们想在我们的UAT系统中使用掩盖的Production数据。 如果我们想快速进行并且混淆程度更高,应该采取什么方法?我正在考虑为人们的姓氏和姓争夺角色,但是如何呢?我应该自己创建一个函数还是可以使用任何预定义的函数?我不想花时间重新发明轮子:) 日期字段呢?例如,应该从整个表中随机选择出生日期并分配给记录,还是有更好的方法呢?

3
如何查看当前的数据库邮件配置?
我们的SQL Server(2008)实例配置为发送邮件,并且一切正常,但是我不知道如何查看现有配置,尤其是SMTP服务器。 在SSMS中,我只能启动配置向导,而在网上找不到任何内容-有关如何进行设置的大量信息,而对于如何查看当前设置则没有任何信息。 如何查看现有设置?

2
何时更新统计信息?
我继承了执行以下任务的维护计划: 清理旧数据 检查数据库完整性 执行数据库和事务日志备份 重组我们的索引 更新统计 删除旧的备份和维护计划文件 在23分钟的维护计划中,更新统计信息需要花费惊人的13分钟。在这13分钟内,对数据库的访问被阻止(或至少暂停了从该数据库到我们其他数据库的复制)。 我的问题是: 我们什么时候应该更新统计信息,为什么? 这似乎是我们每天应该减少的工作频率。我试图让我们摆脱“不必要”维护不必要的思维定势。

5
嵌套视图是一种好的数据库设计吗?
我很久以前就读过书。本书指出,我们不应允许在SQL Server中具有嵌套视图。我不确定为什么不能这样做,否则我可能会记得错误的陈述。 学生们 SELECT studentID, first_name, last_name, SchoolID, ... FROM students CREATE VIEW vw_eligible_student AS SELECT * FROM students WHERE enroll_this_year = 1 教师 SELECT TeacherID, first_name, last_name, SchoolID, ... FROM teachers CREATE VIEW vw_eligible_teacher AS SELECT * FROM teachers WHERE HasCert = 1 AND enroll_this_year = 1 学校 CREATE …

8
在SQL Server 2012上,select *是否仍然是一大禁忌?
在过去的日子里,它被认为是一个很大的禁忌,select * from table或者select count(*) from table因为性能受到影响。 在更高版本的SQL Server中是否仍然如此(我使用的是2012,但我想这个问题将适用于2008-2014)? 编辑:由于人们似乎在这里对我有些偏颇,所以我正在从基准/流行病的角度看待这个问题,而不是是否要做“正确”的事情(当然不是)

5
我可以启动存储过程并立即返回而无需等待它完成吗?
我们有一个存储过程,用户可以手动运行该存储过程以获取全天不断使用的报告的一些更新编号。 我有第二个存储过程,应该在第一个存储过程运行之后运行,因为它基于从该第一个存储过程获得的数字,但是它需要更长的时间运行并且用于单独的过程,所以我不想让用户等待第二个存储过程运行。 有没有一种方法可以让一个存储过程启动另一个存储过程,然后立即返回而无需等待结果? 我正在使用SQL Server 2005。


3
Transact-SQL查询中字符串前的N前缀
请问我什么时候应该在Transact-SQL查询中的字符串前使用N前缀?我开始使用这样的查询无法获得任何结果的数据库 SELECT * FROM a_table WHERE a_field LIKE '%а_pattern%' 直到我将模式更改为N'%а_pattern%'。我从不需要在以前添加此前缀,所以我很好奇。a_field被定义为nvarchar(255),但我认为原因是其他原因。

10
如何使用SELECT INTO复制表但忽略IDENTITY属性?
我有一个带有标识列的表说: create table with_id ( id int identity(1,1), val varchar(30) ); 众所周知, select * into copy_from_with_id_1 from with_id; 也会导致copy_from_with_id_1的身份也为id。 以下堆栈溢出问题提到显式列出所有列。 我们试试吧 select id, val into copy_from_with_id_2 from with_id; 糟糕,即使在这种情况下,id也是一个标识列。 我想要的是一张桌子 create table without_id ( id int, val varchar(30) );

2
为什么更改声明的连接列顺序会引入排序?
我有两个表,它们具有相同的命名,类型和索引键列。其中一个具有唯一的聚集索引,另一个具有非唯一索引。 测试设置 设置脚本,包括一些实际的统计信息: DROP TABLE IF EXISTS #left; DROP TABLE IF EXISTS #right; CREATE TABLE #left ( a char(4) NOT NULL, b char(2) NOT NULL, c varchar(13) NOT NULL, d bit NOT NULL, e char(4) NOT NULL, f char(25) NULL, g char(25) NOT NULL, h char(25) NULL --- and a …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.