我刚刚开始学习优化我的查询并分析他们的查询计划。我认为这个查询会生成非聚集索引查找 + 键查找。
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
问题:我有一张很大的桌子 - 占用了高达 9.5 TB 的空间。我需要从中删除大约 500 万行。我想出的最好方法在 2 小时内删除了 100 万条记录!由于我无法在高峰时间运行此程序,因此我每天只有 2 小时的时间窗口,以这种速度删除 500 万行需要 4 个工作日。
问:我想知道 SQL Server 是否具有可以同时对一个表运行 2 个或多个删除的功能。可能类似于虚拟分区表 - 不确定。
我还想补充一点,运行我的脚本会导致页面锁定,但会阻止事务日志增长。我的脚本与 vonPryz 建议的脚本非常相似:
如何在不增加事务日志的情况下从大表中批量删除Greg M Lucas。
使用 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) 我做了一个例子来让我展示我的问题是什么:
设置:
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) 我最近为一个繁忙的网站迁移了一个 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 2012 事务复制场景方面获得一些帮助 - 或者只是我对 SQL Server 中存储权限的理解。如果我在事务复制配置中更改发布者对特定表的用户权限(例如授予 SELECT 或 INSERT),是否会更改架构,以便订阅者需要从新快照中提取?
我担心这种更改可能会造成停机时间,即在创建新快照时订阅者实际上处于离线状态。理想情况下,我可以只授予特定用户对发布者或订阅者上复制文章的新权限,而无需重置。我不关心更新的权限从发布者复制到订阅者(事实上,理想情况下他们不会)。提前致谢!
replication permissions sql-server-2012 transactional-replication
我有 SQL Server 2012。当我在“拥有的架构”屏幕中创建用户时,其中一个选项是固定数据库角色。如果我拥有固定的数据库角色:
我可以请求您的意见。
我在同步和辅助可读模式下为我的数据库设置了始终可用组的 SQL 2012。我用同步模式完成了故障转移测试,它按预期运行。
在使用异步模式进行强制故障转移测试后,是否需要重建旧的主数据库?因为新主要的变化不会反映回来。数据库状态不同步...而不是同步...
感谢您的投入,因为我对这个概念有所了解。
谢谢
我有表 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) 我有以下数据:
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-2012 ×10
sql-server ×9
delete ×2
duplication ×1
failover ×1
foreign-key ×1
memory ×1
performance ×1
permissions ×1
powershell ×1
replication ×1
scripting ×1
t-sql ×1