假设我有这样的结构:
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
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,因为我们的大多数查询都可以接受或工作得更好。
我刚刚安装了 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) 我正在非常,非常错误的估计聚集索引寻求此查询的步骤(估计行是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