标签: hints

向 CROSS APPLY 添加查询提示

我需要将查询提示(如NOWAITNOLOCK)应用于CROSS APPLY此查询中的 。我该怎么做:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

SELECT *
FROM sys.objects obj WITH (NOLOCK) 
INNER JOIN sys.stats stat WITH (NOLOCK) ON stat.object_id = obj.object_id  
CROSS APPLY sys.dm_db_stats_properties(stat.object_id, stat.stats_id) sp
Run Code Online (Sandbox Code Playgroud)

我无权访问函数内容(出于显而易见的原因。)

我继续从问题中删除了repro,以使其更清楚。我不太关心重现阻塞的能力。(它也发生在客户环境中,以及第 2548 期的 First Responder Kit 中。)

sql-server hints t-sql cross-apply

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

在哪里可以使用 /*+ PARALLEL */ 提示?

它适用于 SELECT 和 UPDATE 语句。

是否还有更多的语句可以使用?

我能够将它与 create 一起使用,但不确定是否真正考虑了该提示。

SQL> create /*+ PARALLEL */ table t1
( id number,
name varchar2(40));

Table created.

SQL>
Run Code Online (Sandbox Code Playgroud)

除了 INSERT 和 UPDATE,什么时候都考虑 PARALLEL 提示?

performance oracle oracle-11g-r2 hints

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

SELECT 锁仅用于插入

我需要获取MAX交易中某个字段的聚合。我在事务中进一步使用此值。我想避免在整个表中插入,而我正在从中获取MAX事务完成时。

我研究了可用的隔离模式和锁定提示。最接近的似乎是TABLOCKX,这是唯一避免在整个表中插入(也更新和选择)的方法。

由于我不会受到表中更新或选择的影响,我希望避免在事务期间仅插入。这个有可能?

更新:执行的字段MAX仅在插入时设置,因此没有获得更新结果过时的风险。

我正在使用 SQL Server 2000。

sql-server sql-server-2000 hints isolation-level

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

如何加速循环 INSERT INTO 语句?

我目前使用以下语句,对于 10,000 行,大约需要 150 秒。我尝试删除目标表上的索引,但这没有帮助。在没有INSERT INTO50ms 的情况下运行循环。我需要它来更新大约 3 亿行,我真的等不及 52 天 (!) 才能完成。

以下更新查询的底线是我需要遍历每一行,对 a 执行计算VARBINARY并从中提取正确的值(我们需要去掉打包的VARBINARY字段),并将其存储在一个新表中。

FETCH NEXT FROM LocCities INTO @LocCity 
WHILE (@@FETCH_STATUS = 0)
BEGIN
    -- several sets, removed calculations for clarity
    SET @LocationId = Calculation1()
    SET @CityId = Calculation2()

    IF(@LocCity <> 0)
    BEGIN
        -- left out an inner loop here on the VARBINARY based on its length
        INSERT INTO LocationCities (LocationId, CityId)
        VALUES (@LocationId, @CityId)
    END
    FETCH NEXT FROM RespCursor INTO …
Run Code Online (Sandbox Code Playgroud)

performance insert hints sql-server-2008-r2

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

为什么添加 WHERE 子句会破坏我的工作查询,并出现错误“由于定义的提示,查询处理器无法生成查询计划...”?

我有以下(愚蠢地简化的)查询,它利用两个引用同一个表的 CTE 并将它们相互连接:

WITH CTE1 AS
(
    SELECT dbo.RemoveNonNumericCharacters(PhoneNumber) AS PhoneNumberCleaned
    FROM PhoneNumbersTable
    GROUP BY dbo.RemoveNonNumericCharacters(PhoneNumber)
),
CTE2 AS
(
    SELECT CTE1.PhoneNumberCleaned
    FROM CTE1
    INNER HASH JOIN PhoneNumbersTable
        ON CTE1.PhoneNumbersCleaned = dbo.RemoveNonNumericCharacters(PhoneNumbersTable.PhoneNumber)
    WHERE PhoneNumbersTable.AreaCode IN (718, 212)
)

SELECT PhoneNumberCleaned
FROM CTE2
Run Code Online (Sandbox Code Playgroud)

注意HASH JOIN里面发生的事情CTE2。到目前为止,这一切都运作良好。

如果我将以下WHERE子句添加到最终SELECT查询中,那么我的整个查询现在变为:

WITH CTE1 AS
(
    SELECT dbo.RemoveNonNumericCharacters(PhoneNumber) AS PhoneNumberCleaned
    FROM PhoneNumbersTable
    GROUP BY dbo.RemoveNonNumericCharacters(PhoneNumber)
),
CTE2 AS
(
    SELECT CTE1.PhoneNumberCleaned
    FROM CTE1
    INNER HASH JOIN PhoneNumbersTable
        ON CTE1.PhoneNumbersCleaned …
Run Code Online (Sandbox Code Playgroud)

sql-server hints execution-plan errors sql-server-2016

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