标签: sql-server

如何更快地查询这 2000 万条记录视图?

对于搜索功能,我使用的视图包含我需要搜索的所有表中的记录。该视图有近 2000 万条记录。针对这种观点的搜索花费了太多时间。

我应该在哪里寻找改善此视图的性能?

视图的粗略定义如下。它包括十三张桌子和大约三十个字段。

CREATE VIEW [dbo].[v_AllForSearch]
AS
SELECT 
  FT.firstField AS [firstField]
, FT.fld_primary AS [fld_primary]
, FT.fld_thirdField AS [thirdField]
, FT.fld_fourthField AS [fourthField]           
, ISNULL(ST.[fld_firstSearchField],'') AS [firstSearchField]
, ISNULL(TT.[fld_thirdSearch],'') AS thirdSearch
, ISNULL(TT.[fld_fourthSearch],'')AS fourthSearch
, ISNULL(TT.[fld_fifthSearch],'')AS fifthSearch
, ISNULL(FRT.[fld_sixthSearch],'') As [sixthSearch]
, ISNULL(FRT.[fld_seventhSearch],'') AS [seventhSearch]
, ISNULL(FRT.[fld_eightSearch],'')AS [eightSearch]
, ISNULL(FIT.[fld_nineSearch],'') AS [nineSearch]
, ISNULL(SIT.[fld_tenthSearch],'')AS [tenthSearch]
, ISNULL(SET.[fld_eleventhSearch],'') AS [eleventhSearch]
, ISNULL(ET.[twelthSearch],'')AS [twelthSearch]
, ISNULL(NT.[thirteenthSearch],'')AS [thirteenthSearch]
, ISNULL(NT.[fourteenSearch],'') AS [fourteenSearch]
, ISNULL(NT.[fifteenSearch],'') AS [fifteenSearch]
, ISNULL(NT.[sxteenSearch],'')  AS [sxteenSearch]
, …
Run Code Online (Sandbox Code Playgroud)

index sql-server optimization view

14
推荐指数
3
解决办法
8112
查看次数

SentryOne 计划浏览器是否有效?

SentryOne Plan Explorer是否像宣传的那样工作,是否合法?有什么问题或需要担心的事情吗?

与 SSMS 对估计执行计划视图的噩梦相比,它似乎以颜色显示了热路径。

我担心的是 - 它是否恶意或以其他方式修改任何数据?

编辑:我刚刚听说过它,以前从未听说过这家公司。

performance sql-server optimization execution-plan query-performance

14
推荐指数
4
解决办法
2493
查看次数

为什么 SSMS 在表格顶部而不是底部插入新行?

每当我在 SQL Server Management Studio 2008(数据库是 SQL Server 2005)的表中手动插入一行时,我的新行就会出现在列表的顶部而不是底部。我正在使用身份列,这会导致诸如

id  row
42 first row
1 second row
2 third row
Run Code Online (Sandbox Code Playgroud)

当获取行且未明确排序时。当为 Web 应用提取行并更改TOP 1查询返回的内容时,这会导致不同的外观。

我知道我可以order by,但为什么会发生这种情况?我的大部分数据都是通过 Web 应用程序插入的,从该应用程序插入的所有数据都按照先进先出的顺序进行,例如,最新的插入位于底部,因此 ID 都在一行中。服务器或 Management Studio 中是否有某些设置会导致这种不正确的排序?

sql-server ssms identity

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

测试存储过程的可伸缩性

我有一个电子邮件应用程序,它将被要求在每个页面加载时将给定用户的新消息数量传送到 UI。我在数据库级别上测试了一些变化,但所有内容都由存储的 proc 调用抽象。

我试图猛击数据库以查看断点(每秒请求数)是什么。

简而言之,我有一个表,比如这个 userId、newMsgCount,在 userId 上有一个聚集索引。SQL 应该能够每秒处理成百上千个这样的响应。我认为落后者是我的 .NET 应用程序。

我怎样才能使这个测试成为一个很好的测试来实现基于 SQL 性能的测试结果?

有没有一个工具,我可以给它一个存储的过程名称和参数,以便它打我的数据库?

我想看看数据库是否可以返回分钟。每秒 250 个响应。

performance sql-server testing scalability performance-testing

14
推荐指数
2
解决办法
4384
查看次数

我可以创建用户定义的表类型并在同一个事务中使用它吗?

当我执行以下命令时(在管理工作室中,GO 会将命令分成批处理)

use tempdb

begin tran
go

CREATE TYPE dbo.IntIntSet AS TABLE(
    Value0 Int NOT NULL,
    Value1 Int NOT NULL
)
go

declare @myPK dbo.IntIntSet;
go

rollback
Run Code Online (Sandbox Code Playgroud)

我收到一条死锁错误消息。我的过程已经陷入僵局。我在 2008、2008R2 和 2012 中看到过这种行为。

有没有办法在它创建的同一个事务中使用我新创建的类型?

sql-server-2008 sql-server deadlock sql-server-2012

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

sqlpackage.exe 忽略 BlockOnPossibleDataLoss?

我有一个将 BlockOnPossibleDataLoss 设置为 false 的 dacpac,但是当我使用 sqlpackage.exe 运行它时部署被阻止,告诉我“列 [a] 被删除,可能会发生数据丢失。”

但是,当我使用完全相同的部署配置文件并从 Visual Studio 2012 发布时,它会通过。

sql-server sql-server-2012 ssdt visual-studio-2012 data-tier-application

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

将 SQL Server 2012 Standard 与 Bitlocker 结合使用

我们正在尝试使用 Bitlocker 来保护 SQL Server 2012 数据库。我们没有任何问题让 bitlocker 工作......我们遇到的问题是一旦驱动器被锁定,SQL Server 就无法再读取数据。

显然,我们很想使用 TDE,但由于它仅限于企业版,因此​​不能使用。我们在服务器上激活了 TPM。这是在 Windows 域中,我们使用 Windows 身份验证......但是一旦驱动器被加密,我们就无法使用任何东西访问数据库。

我在这里缺少什么?

sql-server sql-server-2012

14
推荐指数
1
解决办法
6242
查看次数

sys.partition.rows 列有多准确?

系统视图sys.partitions有一列“行”,它是给定分区中的总行数。对于未分区的表(或只有一个分区,取决于您如何看待它),此列给出了表中的行数。

我很好奇这个列有多准确,我是否可以用它代替SELECT COUNT(1) FROM TableName. 我做了一些实验,创建一个表并添加几千行,删除几百行,再添加几千行等等,而且计数一直都在。但是,我有一张包含大约 7 亿行和几个索引的表。sys.partitions聚集索引的行再次失效,但是其他索引显示出一些细微的变化 (+-20k)。

有谁知道这一行是如何计算的,以及它是否像看起来一样准确?

sql-server sql-server-2008-r2 partitioning count sql-server-2012

14
推荐指数
1
解决办法
4400
查看次数

FreeProcCache 和 FreeSystemCache 的区别

目前,DBCC FREEPROCCACHE当我想在运行 SQL 查询之间从缓冲池中清除信息时,我会运行。但是,我正在查看这篇Technet 文章,其中引用了DBCC FREESYSTEMCACHE. 哪些缓存会FREESYSTEMCACHE擦除而FREEPROCCACHE不会?

sql-server cache

14
推荐指数
1
解决办法
3万
查看次数

更改 nvarchar 列的大小时,是否需要删除唯一索引?重新创建索引时表会被锁定吗?

在我们的数据库中存在一个大表,或多或少是这样的:

CREATE TABLE dbo.production_data
(
    pd_id BIGINT PRIMARY KEY,
    serial NVARCHAR(16) NOT NULL UNIQUE,
    ...
);
Run Code Online (Sandbox Code Playgroud)

但是现在串行字段的大小变得很小,所以我想将其更改为 32。Visual Studio 模式比较工具建议通过以下方式执行此操作:

DROP INDEX ux_production_data_serial ON dbo.production_data;
GO
ALTER TABLE dbo.production_data ALTER COLUMN serial NVARCHAR(32) NOT NULL;
GO
CREATE INDEX ux_production_data_serial ON dbo.production_data(serial ASC);
Run Code Online (Sandbox Code Playgroud)

这真的需要吗?或者更像是这样做的超级保存方式?

另外在重新创建唯一索引时,我的表会被锁定吗?因为这将是一个大问题(因为该表有 3000 万行,我猜重新创建索引需要相当长的时间),因为下一个维护窗口是未来几个月。我的选择是什么?

index sql-server alter-table locking unique-constraint

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