当谈论分区表和索引少于 100 个分区的表时,
没有未对齐的索引:
我的意思是:
非对齐索引
一个独立于其对应表分区的索引。
也就是说,索引具有不同的分区方案或放置在与基表不同的文件组中。
设计非对齐分区索引在以下情况下很有用:
基表尚未分区。
索引键是唯一的,不包含表的分区列。
您希望基表参与使用不同连接列的更多表的并置连接
是否还有其他性能缺陷:
1 - 减慢一些 DBCC 命令
2 - 在分区列以外的列上使用诸如 TOP 或 MAX/MIN 等运算符的查询可能会遇到分区性能降低的情况,因为必须评估所有分区。
3 -
使用分区消除的查询可能具有与大量分区相当或改进的性能。随着分区数量的增加,不使用分区消除的查询可能需要更长的时间来执行。
我有以下脚本,运行时给我一个逗号分隔的数据库名称列表。
SET NOCOUNT ON
declare @db_list NVARCHAR(MAX)
DECLARE @command varchar(1000)
SELECT @COMMAND = 'SELECT DB_NAME()'
SELECT @db_list = STUFF((
SELECT ', ' + name FROM sys.databases
WHERE name like '__Order'
FOR XML PATH(''),
TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, '')
-- in case there are no DBs to show, then show no DB '***'
select @db_list = COALESCE(@db_list,'***')
SELECT @db_list = RTRIM(LTRIM(REPLACE(@DB_LIST,',', ',''')))
select @db_list
Run Code Online (Sandbox Code Playgroud)
这给了我以下结果:
UKOrder,' ATOrder,' AUOrder
Run Code Online (Sandbox Code Playgroud)
1)这给出了错误的结果集,我希望它是
'UKOrder','ATOrder','AUOrder'
Run Code Online (Sandbox Code Playgroud)
2) 如何将@db_list 传递给 sp_MSforeachdb?
假设我想跑
选择 db_name()
在@db_list 中的每个数据库中
英国订单
订单 …
sql-server dynamic-sql sql-server-2008-r2 sql-server-2012 sql-server-2014
我已经运行了一个多小时的服务器端配置文件跟踪,以生成一个 .trc 文件,其中包含我的一个数据库中的所有活动。
然后,我将此 .trc 跟踪文件作为参数传递给数据库引擎优化顾问。
运行 DTA 后,我得到了建议:
我正在使用SQL Server 2005,除了单独编写脚本之外,我似乎找不到任何其他方法,这太耗时了。
我有一个分区表,在现实生活中它有 8000 万行。
出于测试目的,我在这里创建并分区了这个表。
当我运行以下查询时:
select * from countries
where visit >= '20110101'
and visit <= '20111231'
Run Code Online (Sandbox Code Playgroud)
正如您在此处和下图的查询计划中看到的那样,它使用分区消除,所以我知道我在做一些正确的事情。
我知道分区通常不是为了加速我的查询,它是一个管理功能,但是,它可以加速对大表的查询。
我将首先说明我不想要的东西。我不想从我的表中删除任何分区。
我想要的是?
我想以最快的方式从分区中删除所有数据:
有什么比这更快的吗? 不考虑批量删除
BEGIN TRANSACTION T1
DELETE
FROM dbo.countries WITH (TABLOCKX)
WHERE visit >= '20110101'
AND visit <= '20111231'
--COMMIT TRANSACTION T1
Run Code Online (Sandbox Code Playgroud)
int大写INT或小写最正确的拼写是int什么?
reserved wordsSQL Server 中还有很多其他的。
如何找出每个单词的最佳情况?
例如,下图是一段随机代码,其中包含许多不同的单词,我如何验证这些单词是否具有“正确”大小写拼写?
如果我有 CS(区分大小写)数据库,这些事情会重要吗?
会不会影响性能?
让我们说select 1 from table1 where 1=1和SELECT 1 FROM table1 WHERE 1=1?
我有一份工作向一组用户发送不相关的电子邮件。
电子邮件的标题是Staging -> [AUPAIR] arrivalDate trigger issue。
当我使用上面的标题查询 msdb 数据库中的作业表时,我没有得到答案:
USE [msdb]
GO
SELECT j.job_id,
s.srvname,
j.name,
js.step_id,
js.command,
j.enabled
FROM dbo.sysjobs j
JOIN dbo.sysjobsteps js
ON js.job_id = j.job_id
JOIN master.dbo.sysservers s
ON s.srvid = j.originating_server_id
WHERE js.command LIKE N'%Staging -> [AUPAIR] arrivalDate trigger issue%'
Run Code Online (Sandbox Code Playgroud)
只有当我改变我的查询如下时,我才能找到强盗工作:
USE [msdb]
GO
SELECT j.job_id,
s.srvname,
j.name,
js.step_id,
js.command,
j.enabled
FROM dbo.sysjobs j
JOIN dbo.sysjobsteps js
ON js.job_id = j.job_id
JOIN master.dbo.sysservers s
ON s.srvid = j.originating_server_id
--WHERE js.command LIKE N'Staging …Run Code Online (Sandbox Code Playgroud) sql-server database-mail jobs sql-server-2016 string-searching
use master
go
ALTER DATABASE Apcore SET SINGLE_USER WITH ROLLBACK IMMEDIATE
RESTORE DATABASE Apcore
FROM DISK=N'C:\Backups\QG-V-SQL-TS$AIFS_DEVELOPMENT_APCore_FULL_20180909_230034.bak'
WITH FILE = 1,
MOVE N'APCoreDataPrimary' TO N'C:\Program Files\Microsoft SQL Server\MSSQL13.DEVELOPMENT\MSSQL\DATA\APCoreDataPrimary.mdf',
MOVE N'APCoreData1' TO N'C:\Program Files\Microsoft SQL Server\MSSQL13.DEVELOPMENT\MSSQL\DATA\APCoreData1.ndf',
MOVE N'APCoreData_nonclusteredIndexes' TO N'C:\Program Files\Microsoft SQL Server\MSSQL13.DEVELOPMENT\MSSQL\DATA\APCoreData_nonclusteredIndexes.ndf',
MOVE N'APCoreLog_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL13.DEVELOPMENT\MSSQL\DATA\APCoreLog_log.ldf',
recovery, NOUNLOAD, REPLACE, STATS = 1
Run Code Online (Sandbox Code Playgroud)
在开发人员的机器上恢复数据库时,出现上述错误。
我这样做的方式是:
restore filelestonly这是确定会是什么呢?
我有几台服务器,我在 sql server 服务上看到一个蓝色的问号,如下图所示。
启用这些 Windows 防火墙规则对我有用
Windows 管理规范 (WMI-In)
Windows 管理规范 (DCOM-In)
有没有办法通过powershell实现这一目标?
sql-server powershell windows-server connectivity sql-server-2014
我在 sql server 2016
select @@version
Run Code Online (Sandbox Code Playgroud)
Microsoft SQL Server 2016 (SP2-CU15) (KB4577775) - 13.0.5850.14 (X64) Sep 17 2020 22:12:45 版权所有 (c) Microsoft Corporation Enterprise Edition:Windows Server 2012 R2 上的基于内核的许可(64 位)数据中心 6.3(内部版本 9600:)(管理程序)
在 sql server 中的一个简单插入语句中,我有关键字 values
例如:
BEGIN TRANSACTION T1
SELECT @@TRANCOUNT
INSERT INTO [APCore].[usr].[userBusinessArea]
([businessAreaID]
,[userID])
VALUES
(21, 368),
(21, 227419) ,
(21, 99906),
(21, 140470)
SELECT [1]= @@TRANCOUNT
--COMMIT TRANSACTION T1
--ROLLBACK
SELECT [2]=@@TRANCOUNT
Run Code Online (Sandbox Code Playgroud)
问题是,在我运行插入之前,我想使用与 相同的逻辑values来找出这些记录中是否已经有任何记录在表中。
否则你可能会得到这样的结果:
我的做法是:
select top 10 * from
[APCore].[usr].[userBusinessArea]
where …Run Code Online (Sandbox Code Playgroud) 我正在放置一个查询来列出当前正在执行的请求中存在的关键查找,我基本上想解决这个问题,看看是否可以从执行计划中消除这些关键查找。
为了获取这些键查找,我使用以下查询:
SELECT
er.session_id,
er.blocking_session_id,
er.start_time,
er.status,
dbName = DB_NAME(er.database_id),
er.wait_type,
er.wait_time,
er.last_wait_type,
er.granted_query_memory,
er.reads,
er.logical_reads,
er.writes,
er.row_count,
er.total_elapsed_time,
er.cpu_time,
er.open_transaction_count,
er.open_transaction_count,
s.text,
qp.query_plan,
logDate = CONVERT(DATETIME,GETDATE()),
logTime = CONVERT(DATETIME,GETDATE())
FROM sys.dm_exec_requests er
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) s
CROSS APPLY sys.dm_exec_query_plan(er.plan_handle) qp
WHERe er.session_id <> @@SPID
and CONVERT(VARCHAR(MAX), qp.query_plan) LIKE '%IndexScan Lookup%'
Run Code Online (Sandbox Code Playgroud)
我在这个查询中面临的问题是它返回任何,无论其成本key lookup如何。
我想过滤那些,我只想看到昂贵的关键查找。
如何过滤查询以仅显示昂贵的查找操作?
index sql-server execution-plan index-tuning query-performance
sql-server ×10
index ×3
optimization ×2
partitioning ×2
backup ×1
collation ×1
connectivity ×1
delete ×1
dynamic-sql ×1
index-tuning ×1
insert ×1
jobs ×1
metadata ×1
performance ×1
powershell ×1
query ×1
restore ×1
select ×1
statistics ×1
syntax ×1