小编pok*_*oke的帖子

查找具有相同子行集的父行

假设我有这样的结构:

食谱表

RecipeID
Name
Description
Run Code Online (Sandbox Code Playgroud)

配方成分表

RecipeID
IngredientID
Quantity
UOM
Run Code Online (Sandbox Code Playgroud)

关键RecipeIngredients(RecipeID, IngredientID)

有哪些查找重复食谱的好方法?重复配方被定义为具有完全相同的一组成分和每种成分的数量。

我想过使用FOR XML PATH将成分组合到一个列中。我还没有完全探索这个,但如果我确保成分/UOM/数量按相同的顺序排序并且有一个合适的分隔符,它应该可以工作。有更好的方法吗?

有 48K 食谱和 200K 成分行。

sql-server-2008 database-design sql-server relational-division

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

授予用户使用 QUERYTRACEON 9481 的权限

Microsoft建议OPTION (QUERYTRACEON 9481)对在兼容性级别 120 下运行的 SQL Server 2014 数据库性能“降低”的查询使用。

在我的情况下,“降级”意味着从几秒钟到几分钟或更长时间。性能方面,9481 工作得非常好;然而,普通用户会得到一个很好的错误而不是查询结果(运行 SSRS 报告):

User 'xxxxx' does not have permission to run DBCC TRACEON.
Run Code Online (Sandbox Code Playgroud)

该文档表明用户必须是 sysadmin 角色的成员才能运行DBCC TRACEON

是否有任何解决方法可以允许非系统管理员运行使用此提示的查询?

我宁愿不将兼容性级别降低回 110,因为我们的大多数查询都可以接受或工作得更好。

sql-server permissions hints sql-server-2014

7
推荐指数
1
解决办法
5909
查看次数

Ola 的默认 IndexOptimizer 作业会更新我的统计信息吗?

我刚刚安装了 Ola Hallengren 的MaintenanceSolution.sql维护脚本。查看IndexOptimize - USER_DATABASES作业生成的日志输出后,我担心它不会更新统计信息。我担心的原因是我@UpdateStatistics = NULL在日志输出中列出的参数中看到:

Date and time: 2013-07-16 13:58:24
Server: XXXXX
Version: 10.0.5512.0
Edition: Standard Edition (64-bit)
Procedure: [PROD-PH].[dbo].[IndexOptimize]
Parameters: @Databases = 'USER_DATABASES', @FragmentationLow = NULL, @FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE', @FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE', @FragmentationLevel1 = 5, @FragmentationLevel2 = 30, @PageCountLevel = 1000, @SortInTempdb = 'N', @MaxDOP = NULL, @FillFactor = NULL, @PadIndex = NULL, @LOBCompaction = 'Y', @UpdateStatistics = NULL, @OnlyModifiedStatistics = 'N', @StatisticsSample = NULL, @StatisticsResample = 'N', @PartitionLevel = …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server statistics ola-hallengren

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

使用声明的变量时估计行非常错误

我正在非常非常错误的估计聚集索引寻求此查询的步骤(估计行是8637530;实际为74723):

Declare @StartDate as date = '10/1/2014';
Declare @EndDate as date = '10/2/2014';

select Sum(Quantity)
from Daily_GC_Items
where SalesDate between @StartDate and @EndDate;
Run Code Online (Sandbox Code Playgroud)

如果我对这样的日期使用字符串文字,则估计值几乎是完美的(估计行数为 75,337.4;实际为 74,723):

select Sum(Quantity)
from Daily_GC_Items
where SalesDate between '10/1/2014' and '10/2/2014'
Run Code Online (Sandbox Code Playgroud)

表定义:

[SalesDate] [date] NOT NULL,
[Store] [varchar](10) NOT NULL,
[GuestCheckNumber] [smallint] NOT NULL,
[ItemSequence] [smallint] NOT NULL,
[Quantity] [smallint] NOT NULL,
(Several more columns)
Run Code Online (Sandbox Code Playgroud)

首要的关键:

[SalesDate] ASC,
[Store] ASC,
[GuestCheckNumber] ASC,
[ItemSequence] ASC
Run Code Online (Sandbox Code Playgroud)

这种行为的可能原因是什么?

performance sql-server execution-plan sql-server-2014 cardinality-estimates query-performance

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