标签: 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
查看次数