标签: sql-server

如何优化查询

我有一个与此类似的数据库结构,

CREATE TABLE [dbo].[Dispatch](
    [DispatchId] [int] NOT NULL,
    [ContractId] [int] NOT NULL,
    [DispatchDescription] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_Dispatch] PRIMARY KEY CLUSTERED 
(
    [DispatchId] ASC,
    [ContractId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

CREATE TABLE [dbo].[DispatchLink](
    [ContractLink1] [int] NOT NULL,
    [DispatchLink1] [int] NOT NULL,
    [ContractLink2] [int] NOT NULL,
    [DispatchLink2] [int] NOT NULL
) ON [PRIMARY]

GO
INSERT [dbo].[Dispatch] ([DispatchId], [ContractId], [DispatchDescription]) VALUES (1, 1, N'Test') …
Run Code Online (Sandbox Code Playgroud)

performance sql-server query-performance

9
推荐指数
1
解决办法
361
查看次数

where 子句中的列顺序应该与索引顺序相同吗?

我正在阅读这个 use-the-index-luke.com,它详细解释了索引的工作原理。此人重申的一件事是索引的顺序很重要,并且为了使查询快速,where 子句列应该与索引中的列相同。今天,我只是证实了这个理论并在 SQL Server 2008 上创建了一个表(id int ,name nvarchar(100) )。我在其中插入了一些 5000 行并创建了一个索引 create index abc on test (name, id )

并触发了查询

select ID, name 
from test 
where ID = 10
and name = '10'
Run Code Online (Sandbox Code Playgroud)

我期待全表扫描后跟查询计划中的选择,但令我惊讶的是计划的输出是选择后的索引扫描。 查询计划

所以,我的问题是 Where 子句中的列顺序重要还是 SQL Server 根据索引定义重新排列它们?

谢谢 !!

sql-server-2008 sql-server

9
推荐指数
2
解决办法
5001
查看次数

SSD 上 SQL Server 2012 中 tempdb、mdf 和 ldf 文件的最佳位置?

我意识到这可能是一个非常开放的问题,答案可能会有所不同,但是在谈论 SSD 时,SQL Server 2012 中 tempdb、mdf 和 ldf 文件的最佳位置是什么?

新购买前,我有一个现有的 SSD,其中安装了 SQL Server 2012 核心文件和 tempdb,并且在 7200rpm 的 HDD 上安装了 mdf/ldf。然后我买了2个SSD,初衷是把mdf放在一个上,ldf放在另一个上。

但是,通过更多地阅读它,当涉及到 SSD 时,用于 mdf 和 ldf 文件的单独物理磁盘并不真正适用。正确的?

所以,我想到了以下几点:

SSD 1 - SQL Server 2012 核心文件和 Windows
SSD 2 - tempdb
SSD 3 - mdf 和 ldf

如果它有所不同,这将只专用于一个数据库,因此多个数据库之间不会有任何争用。

我的“思考”设置是好的还是只是一种浪费(即没有理由分离出 tempdb),我现在有一个额外的 SSD 可以在其他地方使用?

sql-server storage sql-server-2012

9
推荐指数
1
解决办法
4083
查看次数

如何编写引用链接服务器的可移植 SQL?

我有一个指向链接服务器的存储过程。在整个过程中的几个地方,我得到了如下内容:

INSERT INTO [TableName]
(...Columns...)
SELECT ...Columns...
FROM [ServerName\InstanceName].[Catalogue].[dbo].[TableName]
WHERE TableNameID = @TableNameID
Run Code Online (Sandbox Code Playgroud)

这个过程存在于我的开发环境、测试环境和实时环境中。

问题是该过程的每个副本都略有不同,因为每个环境的服务器名称都不同。这使得管理脚本更新的部署变得很麻烦。

有没有办法使程序可移植,以便每个环境都可以运行相同版本的程序?

如果没有,我可以做些什么来使脚本部署更不容易出错/错误?

sql-server-2008 sql-server stored-procedures linked-server

9
推荐指数
1
解决办法
5103
查看次数

什么可以加速 SQL 计数查询?

在进行计数(聚合)SQL 查询时,在这 3 个数据库系统中,什么可以加快执行时间?我相信很多事情都可以加快速度(硬件之一),但我只是一个新手 DBA,所以我相信我会在这里得到一些答案。我将大约 1.57 亿行迁移到 SQL Server 数据库,并且这个查询需要永远执行。但是在我的源 Netezza 数据库中,它需要几秒钟。

例如:

网易6:

SELECT COUNT(*) FROM DATABASENAME..MYTABLE
Run Code Online (Sandbox Code Playgroud)

甲骨文 11g:

SELECT COUNT(*) FROM MYTABLE
Run Code Online (Sandbox Code Playgroud)

SQL Server 2012:

SELECT COUNT(*) FROM DATABASENAME.[dbo].[MYTABLE]
Run Code Online (Sandbox Code Playgroud)

performance sql-server count netezza query-performance

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

可用性组能否提供无缝故障转移(没有查询失败)?

我一直在测试 SQL Server 2012 中的可用性组功能,我发现当主服务器故障转移到辅助服务器时,大约有 15 秒的停机时间。在此期间执行的所有 SQL 查询都将失败,直到故障转移转换完成。

有什么方法可以将其降低到 0 秒并防止查询在故障转移转换期间失败?

换句话说,有没有办法让在失败期间运行的任何查询被重定向到主服务器而不是失败......并且有没有办法让新的数据库连接立即连接到辅助服务器而不是失败在故障转移过渡期间连接?

我目前在可用性组中设置了 2 个服务器。

sql-server sql-server-2012 availability-groups

9
推荐指数
1
解决办法
4985
查看次数

恢复备份失败 - 文件“Db”无法恢复到“{...}.mdf”。使用 WITH MOVE 标识文件的有效位置

我在尝试对从客户那里收到的备份文件使用 restore 命令进行恢复时遇到以下错误。

从磁盘恢复数据库 SFDB = N'C:\Backup\Backup.bak'

关于我可以做些什么来纠正这个问题的任何想法?它正在寻找 mdf,所以我可以假设我拥有的备份文件是增量备份而不是完整备份,这就是它寻找 mdf 的原因吗?

我不确定 1) 他们是否提供了所有数据(整个数据库)或 2) 我有正确的数据 - 我可以使用正确的 T-SQL 命令进行恢复 - 我只是不知道如何。

帮助表示赞赏。

Msg 5133, Level 16, State 1, Line 2
Directory lookup for the file "D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Db.mdf" failed with the operating system error 21(failed to retrieve text for this error. Reason: 15105).
Msg 3156, Level 16, State 3, Line 2
File 'Db' cannot be restored to 'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Db.mdf'. Use WITH MOVE to identify a valid …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server

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

SQL Server Filetable 文档属性

我正在使用 SQL Server 2012 的Filetable来存储文档并使用Semantic Search搜索它们。

我想知道是否有办法列出所有文档属性(元数据)。有一种方法可以让全文搜索索引和搜索文档属性。我可以使用以下语句制作 SQL Server 索引的属性列表:

 SELECT * FROM sys.registered_search_properties; 
Run Code Online (Sandbox Code Playgroud)

我还可以使用 SQL 或使用程序扩展此列表。

我没有找到一种列出实际信息的方法。我正在寻找的是一个列表,如:

  • 作者范尼斯特德Beeten
  • 标题: 测试文档
  • 自定义属性自定义值

任何人都可以指出我正确的方向吗?

编辑:Bob Beauchemin 创建了一张描述我的问题的票。由于 DMV 未列出属性值,因此我无法在我的项目中使用它。

我最终使用 C# 列出带有OleDocumentProperties对象的自定义属性。此对象可以从 Office 文档中读取属性。我会继续关注这个问题,希望有更好的解决方案。

sql-server full-text-search metadata

9
推荐指数
2
解决办法
851
查看次数

为具有有限协作距离的行分配唯一值的解决方案

我有一个可以使用以下代码创建和填充的表:

CREATE TABLE dbo.Example(GroupKey int NOT NULL, RecordKey varchar(12) NOT NULL);
ALTER TABLE dbo.Example
    ADD CONSTRAINT iExample PRIMARY KEY CLUSTERED(GroupKey ASC, RecordKey ASC);
INSERT INTO dbo.Example(GroupKey, RecordKey)
VALUES (1, 'Archimedes'), (1, 'Newton'), (1, 'Euler'), (2, 'Euler'), (2, 'Gauss'),
       (3, 'Gauss'), (3, 'Poincaré'), (4, 'Ramanujan'), (5, 'Neumann'),
       (5, 'Grothendieck'), (6, 'Grothendieck'), (6, 'Tao');
Run Code Online (Sandbox Code Playgroud)

对于基于与另一行的有限协作距离的所有行RecordKey,我想分配一个唯一值 - 我不关心唯一值是如何或什么数据类型。

可以使用以下查询生成符合我要求的正确结果集:

SELECT 1 AS SupergroupKey, GroupKey, RecordKey
FROM dbo.Example
WHERE GroupKey IN(1, 2, 3)
UNION ALL
SELECT 2 AS SupergroupKey, GroupKey, …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2016

9
推荐指数
3
解决办法
412
查看次数

事件日志:服务器 TCP 提供程序未能侦听 ['any' <ipv6> 1433]。tcp 端口已被使用

这不是重复的;我的情况与我发现的其他情况不同:

MSSQLSERVER 服务*不*启动,端口 1433 正在使用 https://blogs.msdn.microsoft.com/sql_pfe_blog/2016/10/05/tcp-port-is-already-in-use/ https://support。 plesk.com/hc/en-us/articles/213409409

区别:

  • cls & netstat -oanb -p tcpTCPView 和 TCPView都没有显示在端口 1433 上侦听的任何内容
  • 根据 EventLog 消息,这是在 IPV6 上发生的
  • 对于在同一台机器上运行的两个命名实例,该问题不会出现 - 只有默认实例

据我所知,我没有以任何方式、形状或形式使用 IPV6。我当然没有配置它。

当我进行以下任何配置时,该服务将启动:

  • 在 SQL 配置管理器中禁用 TCP/IP
  • 启用 TCP/IP 但在TCP/IP 属性中关闭“全部侦听”
  • 当“全部监听”关闭时,禁用“ IP 地址”选项卡上的所有 IP

如果我执行以下任一操作,服务将无法启动:

  • 打开全部收听
  • 启用任何 IP 地址

这让我把头发拉了出来。

这里出了什么问题?

sql-server tcpip

9
推荐指数
2
解决办法
4229
查看次数