我遇到一个问题,我不断从下面的查询中获取值“CtP_PETER_Fact”。它应该是区分大小写的 where 子句。我尝试了几种不同的方法:在选择中的“Where ObjectName”之后、正则表达式之后设置 COLLATE 语句,并使用排序规则创建列。我不断得到我意想不到的输出。也许是我的正则表达式有问题?我也对正则表达式进行了很多实验,但似乎无法让它发挥作用。
IF OBJECT_ID('tempdb..#nameFacts') IS NOT NULL
DROP TABLE #nameFacts;
CREATE TABLE #nameFacts (
objectname varchar(200) COLLATE SQL_Latin1_General_CP1_CS_AS,
ObjectType varchar(40)
)
insert into #nameFacts (objectname, ObjectType)
values
('BPD_Inslap_Fact','Fact')
,('CTP_HENK_FACT','Fact')
,('CTP_PETER_Fact','Fact')
,('CTP_PETER_FACT','Fact')
,('CtP_PETER_Fact','Fact')
,('C0P_PETER_Fact','Fact')
,('C0P_PETER_FACT','FACT')
SELECT *
FROM #nameFacts
WHERE
ObjectName --COLLATE SQL_Latin1_General_CP1_CS_AS
LIKE '[A-Z0-9][A-Z][A-Z][_][A-Z][A-Z][A-Z][A-Z][A-Z][_][F][a][c][t]' --COLLATE SQL_Latin1_General_CP1_CS_AS
IF OBJECT_ID('tempdb..#nameFacts') IS NOT NULL
DROP TABLE #nameFacts;
Run Code Online (Sandbox Code Playgroud)
我不断收到下面的输出,我不希望得到值“CtP_PETER_Fact”。我使用的是 SQL Server 2016 SP2 CU 17。
我有一个疑问:
select * from Aview where field=20
order by id desc
Run Code Online (Sandbox Code Playgroud)
这将在大约 1 秒内从视图中返回 2700 行。
在查询中添加“top 20”使 MSSQL 在 43 秒内返回!
这是一个很难重现的问题,重建统计数据可以修复该问题几天,但随后又回来了。
我使用 SQL 已经有几十年了,我从未见过添加“top”导致时间增加的情况。
查看执行计划,如果执行前 20 条,它似乎正在执行 9.6 亿行的惰性假脱机操作,但如果不执行,则不会执行。
我有一个宽表,相对较大,有 14,264,775 行,在 Azure SQL 数据库上运行。
以下查询需要一些 TLC。
IF EXISTS (
SELECT 1/0
FROM dbo.table1 src
INNER JOIN dbo.table1 tgt
ON tgt.Col1 = src.Col1
WHERE tgt.ValidFrom <= src.ValidTo
AND tgt.ValidTo >= src.ValidFrom
AND tgt.RecordId <> src.RecordId
)
BEGIN
RAISERROR('Overlap detected in dbo.table1', 11, 1);
END ;
Run Code Online (Sandbox Code Playgroud)
我有这个索引。
CREATE NONCLUSTERED INDEX [IX__table1] ON dbo.table1
( Col1 )
INCLUDE (ValidFrom, ValidTo, RecordId)
GO
Run Code Online (Sandbox Code Playgroud)
这是查询的 io 统计信息。逻辑阅读能力非常出色。
这是计划 XML。我尝试了 PasteThePlan,但它无法解析计划 XML。(也许它不喜欢Axure sql数据库计划xml)。
如您所见,[src] 上有一个索引扫描;读取 14,264,775 行(与表中的所有行数相同)。并在 [tgt] 上进行索引查找;读取 194,405,307 行。
我需要改变什么来提高查询的性能? …
sql-server index-tuning azure-sql-database query-performance
我正在从使用对象 ID 和属性类型作为聚集索引的属性表迁移一些存储“键值”样式的数据(我也尝试过作为非聚集索引):
\nCREATE TABLE [dbo].[#attrs](\n [DataMigrationEventObjectID] [int] NOT NULL,\n [AttributeType] [varchar](128) NOT NULL,\n [AttributeValue] [varchar](255) NULL\n) \nCREATE CLUSTERED INDEX pk ON #attrs ([DataMigrationEventObjectID],AttributeType);\nRun Code Online (Sandbox Code Playgroud)\n我添加了属性值来选择值,因为数据库中的属性表有很多其他数据,我可以仅为此迁移事件选择它。使用我的测试数据集来填充此表的查询会插入约 3k 行,并且运行时间不到一秒(我的数据集中总共约有 50 个对象,每个对象都有多个属性)。
\n查询中表的连接如下所示,连接聚集索引:
\n INNER JOIN #attrs obj_gvn\n ON obj_gvn.DataMigrationEventObjectID = obj.DataMigrationEventObjectID\n AND obj_gvn.AttributeType = \'GivenName\'\nRun Code Online (Sandbox Code Playgroud)\n通过对该临时表进行 14 个联接,查询将在几秒钟内完成。如果有 15 个连接,查询需要一分钟,如果有 16 个以上连接,则半小时后仍在运行。
\n我已经检查了所有联接是否存在意外条件,这会导致返回太多行,当它在 1 分钟内返回时,它只返回正确的行,所以我不认为存在意外的笛卡尔联接。设置 MAXDOP 值不会影响它,并且查询运行一分钟时返回的查询计划不会标记任何问题。
\n对于 SQL,我错过了什么,导致它在聚集索引上进行大量联接,理论上应该很快,而且记录数量如此之少?
\n我无法获得实际执行计划,因为查询未完成,并且因为它使用临时表,所以我无法获得其估计计划。我尝试将临时表捏造为数据库中的真实表并生成估计计划,但 2 分钟后该计划仍未生成,因此看起来延迟是在“创建计划”方面
\n粘贴查询的缩短版本的计划:brentozar.com/pastetheplan/ ?id=Hy76dd92i
\n我已经更新了数据库的统计数据以防万一,但它仍然没有生成计划。
\n我过去处理过越来越多有问题的连接查询,其中计划编译仍然是即时的。我觉得它在“生成计划”步骤失败这一事实一定意味着什么。
\n不幸的是,更新到最新的 CU 没有帮助。 …
我使用定制的 Stack Overflow 数据库(180GB)并运行一个简单的更新查询:(Users 表上只有一个聚集索引)
Begin Tran
Update U set U.Reputation=100000
from StackOverflow.dbo.Users as U
where U.CreationDate = '2008-10-10 14:26:33.540'
Run Code Online (Sandbox Code Playgroud)
查询计划:
此查询会导致锁升级。我无法在另一个窗口中使用同一个表运行查询:
select * from StackOverflow.dbo.Users as U where U.id=11
Run Code Online (Sandbox Code Playgroud)
如果我option (maxdop 1)在查询末尾添加以避免并行,则一切都很好(计划)。
在较小的 Stack Overflow DB (StackOverflow2013 - 52GB) 中不会发生锁升级(计划)。
如何确定导致升级的数据量?
我使用 SQL Server 2019。数据库兼容级别为 150。
表信息:
我需要删除所有三个表中 UserIndex = 1 和 ItemNumber = 5202 的记录,所有这些记录都在单个查询中。我正在使用 SQL 2008 R2。
表用户信息1
| 用户索引 | 项目编号 | 项目计数 |
|---|---|---|
| 1 | 5202 | 99 |
| 1 | 1600 | 50 |
| 2 | 155 | 2 |
| 3 | 125 | 60 |
表用户信息2
| 用户索引 | 项目编号 | 项目计数 |
|---|---|---|
| 8 | 1265 | 50 |
| 4 | 1899 | 41 |
| 1 | 5202 | 99 |
| 3 | 125 | 60 |
表用户信息3
| 用户索引 | 项目编号 | 项目计数 |
|---|---|---|
| 6 | 5205 | 85 |
| 1 | 6666 | 41 |
| 3 | 4455 | 44 |
| 1 | 5202 | 50 |
我尝试将此查询与两个表一起使用,但它不起作用:
DELETE ItemInfo1, ItemInfo2
FROM ItemInfo1
LEFT JOIN ItemInfo2
ON ItemInfo1.UserIndex = ItemInfo2.UserIndex
WHERE ItemInfo1.UserIndex = 1;
Run Code Online (Sandbox Code Playgroud) 我在前 6 个月内一直在拉动总库存。如何在同一查询中提取过去 6 个月内的总库存?
另外我想要查询的结果如下所示:
Stock Code | the first 6 months | the second 6 months etc.
Run Code Online (Sandbox Code Playgroud)
我的 SQL 查询:
SELECT TOP (100) PERCENT STOK_KODU,
COALESCE (SUM(CASE WHEN kod1 = 'G' THEN kod2 ELSE 0 END), 0)
- COALESCE (SUM(CASE WHEN kod1 = 'C' THEN kod2 ELSE 0 END), 0) AS StokToplam1
FROM s_hareket WHERE (STOK_KODU BETWEEN '01001' AND '75000')
and (tarih BETWEEN '2011-01-01' and '2011-06-30')
GROUP BY STOK_KODU
ORDER BY STOK_KODU
Run Code Online (Sandbox Code Playgroud) 我想知道是否可以在具有NOT NULL约束的列中插入“空”字符串。
我正在使用 PostgreSQL,尽管这可能也适用于其他数据库管理系统。
查询如下所示
INSERT INTO originators(originator, id, regexp)
VALUES ('null', 1, -1);
Run Code Online (Sandbox Code Playgroud)
这是表设计:
CREATE TABLE originators
(
originator varchar(30) NOT NULL
, id int NOT NULL
, regexp int NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
这里原始列有一个NOT NULL约束,所以表中不应该有 NULL 值。
但是,当我查询表时,我看到的是:
????????????????????????????????? ? 创始者?ID ?正则表达式? ????????????????????????????????? ? 空值 ?1 ? -1 ? ?????????????????????????????????
这怎么可能?
假设我在一行上运行多列更新。如果某些列包含与数据库中先前存在的值相同的值,则数据库引擎是否将新数据物理写入数据库?如果是,如何避免?
我即将实施一项作业,该作业将在大表上运行更新,并且大多数值将相同,但仍然必须重新计算它们。我想知道即使没有必要,更新是否也会重写每一列,因为存储介质会更快地降级。
我有一个表结构是:
year | code | name| value | wef |
2014 | a001 | abe | 2000 | 2014-04-01 |
2014 | a001 | def | 3000 | 2014-05-01 |
2014 | a002 | abe | 2000 | 2014-06-01 |
2014 | a003 | def | 2000 | 2014-04-01 |
2014 | a003 | mno | 5000 | 2014-06-01 |
Run Code Online (Sandbox Code Playgroud)
我需要的结果格式为:
year | code | abe | abe__wef | def | def__wef | mno | mno____wef |
2014 | a001 …Run Code Online (Sandbox Code Playgroud) sql-server ×9
collation ×1
delete ×1
group-by ×1
index-tuning ×1
null ×1
optimization ×1
oracle ×1
parallelism ×1
php ×1
pivot ×1
postgresql ×1
table-spool ×1
top ×1
xampp ×1