小编Mar*_*lli的帖子

分区表和索引 - 有什么缺点?

当谈论分区表和索引少于 100 个分区的表时,

没有未对齐的索引:

我的意思是:

非对齐索引

一个独立于其对应表分区的索引。

也就是说,索引具有不同的分区方案或放置在与基表不同的文件组中。

设计非对齐分区索引在以下情况下很有用:

基表尚未分区。

索引键是唯一的,不包含表的分区列。

您希望基表参与使用不同连接列的更多表的并置连接

是否还有其他性能缺陷:

1 - 减慢一些 DBCC 命令

2 - 在分区列以外的列上使用诸如 TOP 或 MAX/MIN 等运算符的查询可能会遇到分区性能降低的情况,因为必须评估所有分区。

3 -

使用分区消除的查询可能具有与大量分区相当或改进的性能。随着分区数量的增加,不使用分区消除的查询可能需要更长的时间来执行。

performance index sql-server partitioning sql-server-2014

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

如何将数据库列表传递给 sp_MSforeachdb?

我有以下脚本,运行时给我一个逗号分隔的数据库名称列表。

        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

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

使用数据库引擎优化顾问 - 如何为建议生成脚本?

我已经运行了一个多小时的服务器端配置文件跟踪,以生成一个 .trc 文件,其中包含我的一个数据库中的所有活动。

然后,我将此 .trc 跟踪文件作为参数传递给数据库引擎优化顾问。

在此处输入图片说明

运行 DTA 后,我得到了建议:

在此处输入图片说明 我如何编写建议?

我正在使用SQL Server 2005,除了单独编写脚本之外,我似乎找不到任何其他方法,这太耗时了。

index sql-server-2005 sql-server optimization statistics

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

从分区表的分区中删除所有数据的最快方法是什么?

我有一个分区表,在现实生活中它有 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)

查询计划在这里

在此处输入图片说明

sql-server delete optimization partitioning sql-server-2014

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

SQL Server 中每个保留字的大小写正确吗?

int大写INT或小写最正确的拼写是int什么?

reserved wordsSQL Server 中还有很多其他的。

如何找出每个单词的最佳情况?

例如,下图是一段随机代码,其中包含许多不同的单词,我如何验证这些单词是否具有“正确”大小写拼写?

如果我有 CS(区分大小写)数据库,这些事情会重要吗?
会不会影响性能?

让我们说select 1 from table1 where 1=1SELECT 1 FROM table1 WHERE 1=1

在此处输入图片说明

如何在 SQL Server 中将数据转换为适当的大小写

sql-server best-practices collation metadata

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

如何找到发送特定电子邮件的工作?

我有一份工作向一组用户发送不相关的电子邮件。

电子邮件的标题是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

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

备份或恢复被中止 - 可能是什么?

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)

在此处输入图片说明

在开发人员的机器上恢复数据库时,出现上述错误。

我这样做的方式是:

  • 首先让我说我不担心 - 权限、索引、触发器、同义词等。
  • 我将备份文件(小于 1 GB)从 live 复制到她的本地机器
  • 做了restore filelestonly这是确定
  • 我不得不将数据库设置为 single_user 模式,因为有一些服务每秒钟都在尝试使用它
  • 准备好上面的脚本,并在运行它时收到该错误消息。

会是什么呢?

在此处输入图片说明

sql-server backup restore sql-server-2016

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

如何使用 powershell 启用这些 Windows 防火墙规则?

我有几台服务器,我在 sql server 服务上看到一个蓝色的问号,如下图所示。

在此处输入图片说明

这是解决方案

启用这些 Windows 防火墙规则对我有用

Windows 管理规范 (WMI-In)

Windows 管理规范 (DCOM-In)

有没有办法通过powershell实现这一目标?

sql-server powershell windows-server connectivity sql-server-2014

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

如何在“IN”语句中使用关键字“VALUES”?

我在 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)

sql-server query syntax insert select

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

如何找出当前查询计划中的“Key Lookups”?

我正在放置一个查询来列出当前正在执行的请求中存在的关键查找,我基本上想解决这个问题,看看是否可以从执行计划中消除这些关键查找

为了获取这些键查找,我使用以下查询:

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

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