标签: sql-server-2012

为什么要进行聚集索引扫描?

我刚刚开始学习优化我的查询并分析他们的查询计划。我认为这个查询会生成非聚集索引查找 + 键查找。

SELECT ct.*
FROM Person.ContactType AS ct
WHERE ct.Name LIKE 'Own%';
Run Code Online (Sandbox Code Playgroud)

相反,它使用聚集索引扫描。我不知道为什么。

我正在 SQL Server 2012 Express 上使用 AdventureWorks2012 数据库。ContactTypeId 列上有聚集索引,Name 列上有非聚集索引。第三列 (ModifiedDate) 不属于任何索引。该表仅包含 20 行。

我怀疑查询优化器决定进行聚集索引扫描,因为表只有 20 行,也许扫描索引然后进行键查找更快。

sql-server execution-plan sql-server-2012 sql-server-express

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

运行并行删除语句

问题:我有一张很大的桌子 - 占用了高达 9.5 TB 的空间。我需要从中删除大约 500 万行。我想出的最好方法在 2 小时内删除了 100 万条记录!由于我无法在高峰时间运行此程序,因此我每天只有 2 小时的时间窗口,以这种速度删除 500 万行需要 4 个工作日。

问:我想知道 SQL Server 是否具有可以同时对一个表运行 2 个或多个删除的功能。可能类似于虚拟分区表 - 不确定。

我还想补充一点,运行我的脚本会导致页面锁定,但会阻止事务日志增长。我的脚本与 vonPryz 建议的脚本非常相似:

如何在不增加事务日志的情况下从大表中批量删除Greg M Lucas。

sql-server delete sql-server-2012

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

SQL Server 2012 Powershell 脚本以生成具有架构和数据的数据库

使用 Sql Server 2012,有人可以向我展示一个简单的 powershell 3 脚本来生成我的整个数据库(架构和数据)吗?

我试过这个:

$Filepath='d:\b\t' # local directory to save build-scripts to
$DataSource='HH' # server name and instance
$Database='HMovies'# the database to copy from
# set "Option Explicit" to catch subtle errors
set-psdebug -strict
$ErrorActionPreference = "stop" # you can opt to stagger on, bleeding, if an error occurs
# Load SMO assembly, and if we're running SQL 2008 DLLs load the SMOExtended and SQLWMIManagement libraries
$ms='Microsoft.SqlServer'
$v = [System.Reflection.Assembly]::LoadWithPartialName( "$ms.SMO")
if ((($v.FullName.Split(','))[1].Split('='))[1].Split('.')[0] -ne '9') { …
Run Code Online (Sandbox Code Playgroud)

sql-server powershell scripting sql-server-2012

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

为什么 SQL Server 使用聚集索引扫描进行自引用 FK 级联删除

我做了一个例子来让我展示我的问题是什么:

设置:

CREATE TABLE [dbo].[Test](
    [TestId] [bigint] IDENTITY(1,1) NOT NULL,
    [ParentTestId] [bigint] NULL,
 CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED ([TestId] ASC)
)
GO

ALTER TABLE [dbo].[Test]  WITH CHECK ADD  CONSTRAINT [FK_Test_ParentTest] 
      FOREIGN KEY([ParentTestId])
REFERENCES [dbo].[Test] ([TestId])
GO

ALTER TABLE [dbo].[Test] CHECK CONSTRAINT [FK_Test_ParentTest]
GO

DECLARE @iter INT
SET @iter = 1
WHILE @iter < 1000
BEGIN
    INSERT INTO dbo.Test ( ParentTestId )
    VALUES  ( null ),( null ),( null ),( null ),( null ),( null ),( null ),( null ),
    ( …
Run Code Online (Sandbox Code Playgroud)

performance foreign-key sql-server delete sql-server-2012

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

为什么 SQL Server 2012 工作集内存低?

我最近为一个繁忙的网站迁移了一个 100GB 的数据库:

MS SQL 2008 Standard Edition R2
Windows Server 2008
48gb RAM
Run Code Online (Sandbox Code Playgroud)

到

MS SQL 2012 Web Edition
Windows Server 2012
64gb RAM
Run Code Online (Sandbox Code Playgroud)

我注意到 2012 年的内存使用情况似乎有所不同,与2008 年服务器相比,工作集内存相对较低(请参见下面的屏幕截图)。

题

这看起来正确吗,我应该担心吗?我想确保 MSSQL 可以根据需要访问尽可能多的内存。两台服务器的使用配置文件,就来自它们所支持的网站的请求而言,是相同的,因此查询的模式或数量没有改变。

SQL Server 2008 在此处输入图片说明

SQL Server 2012 在此处输入图片说明

SQL Server 2008 内存设置 在此处输入图片说明

SQL Server 2012 内存设置 在此处输入图片说明

感谢您提供任何提示。

sql-server memory sql-server-2012

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

使用 SQL 事务复制,更改用户对表的权限是否会触发新快照?

我希望在 SQL Server 2012 事务复制场景方面获得一些帮助 - 或者只是我对 SQL Server 中存储权限的理解。如果我在事务复制配置中更改发布者对特定表的用户权限(例如授予 SELECT 或 INSERT),是否会更改架构,以便订阅者需要从新快照中提取?

我担心这种更改可能会造成停机时间,即在创建新快照时订阅者实际上处于离线状态。理想情况下,我可以只授予特定用户对发布者或订阅者上复制文章的新权限,而无需重置。我不关心更新的权限从发布者复制到订阅者(事实上,理想情况下他们不会)。提前致谢!

replication permissions sql-server-2012 transactional-replication

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

如果用户拥有数据库固定角色,他们是该角色的管理员吗?

我有 SQL Server 2012。当我在“拥有的架构”屏幕中创建用户时,其中一个选项是固定数据库角色。如果我拥有固定的数据库角色:

  1. 我被授予什么权限?
  2. 我是这个角色的管理员?

sql-server sql-server-2012

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

AlwaysOn 可用性组强制故障转移

我可以请求您的意见。

我在同步和辅助可读模式下为我的数据库设置了始终可用组的 SQL 2012。我用同步模式完成了故障转移测试,它按预期运行。

在使用异步模式进行强制故障转移测试后,是否需要重建旧的主数据库?因为新主要的变化不会反映回来。数据库状态不同步...而不是同步...

感谢您的投入,因为我对这个概念有所了解。

谢谢

sql-server sql-server-2012 failover availability-groups

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

如何对非聚集索引列进行分区?

我有表 ORDERS。其中有百万行。我需要在 Order 上添加 Pationed Index 以根据新的 IsLocked 字段将数据存储在两个文件之一中。但是当我检查表时,ISLocked 列上有一个非聚集索引.IsLocked 字段由 1 和 O 组成。你们能建议我最好的方法吗。

CREATE TABLE [Orders](
    [OrderID] [int] IDENTITY(1,1) NOT NULL,
    [OrderNo] [varchar](50) NULL,
    [AccountNo] [varchar](20) NULL,
    [CompleteDate] date null,
    [LastUpdateDate]) date null,
    [AccountID]  int NULL,
    [IsWarranty] [bit] NULL,
    [IsEmailAddressFound] [bit] NULL,
    [IsLocked] [bit] NOT NULL,
    [LinkOrderID] [int] NULL
)
Run Code Online (Sandbox Code Playgroud)

但已经有一个

CREATE NONCLUSTERED INDEX [IX_IsLockedAccountID] ON [coe].[Orders]
(
    [IsLocked] ASC,
    [AccountID] ASC
)
INCLUDE (     [OrderNo],
    [CompleteDate],
    [LastUpdateDate]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

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

如何从具有重复键的表中删除唯一行?

我有以下数据:

      road        |  ID  | other column  | other column | 
------------------+------+---------------+--------------+          
MAIN ST           |  1   |     ...       |     ...      |
MAIN ST           |  2   |     ...       |     ...      |        
MAIN ST           |  3   |     ...       |     ...      |
BERRY LN          |  4   |     ...       |     ...      |
BERRY LN          |  5   |     ...       |     ...      |
BERRY LN          |  6   |     ...       |     ...      |
JOHN RD           |  7   |     ...       |     ...      |
JOHN RD           |  8   | …
Run Code Online (Sandbox Code Playgroud)

sql-server duplication t-sql sql-server-2012

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