小编Iva*_*nov的帖子

SQL Server 中 BIT 字段的等式 (=) 和不等式 (<>) 有什么区别?

之间有差异WHERE [BitField] = 1WHERE [BitField] <> 0

它们在逻辑上似乎是等价的。

但是,SQL Server 不同意并创建略有不同的执行计划。(这很糟糕,因为第二种形式不能非常有效地使用现有索引。)

我是否遗漏了什么,或者这只是不等式运算符的行为方式?

sql-server datatypes sql-server-2017

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

为什么创建索引和运行查询比没有它运行查询更快?

我有几百万行的表。它包含来自外部服务的日志,所以我决定不对其进行索引(大量插入,稀疏读取)。

当我运行从没有索引的表中读取的查询时,它需要(不出所料)很长时间。

但是,当我创建索引并运行查询然后删除索引时,速度要快得多(即使创建和删除索引也是如此)。

为什么创建临时索引更快,而不是让 SQL Server 做它的事情?这似乎不直观(为什么 SQL Server 不自己创建索引?)。这种方法有什么缺点吗?


有问题的查询看起来像这样,但我认为它不一定相关,因为我在其他地方也看到了类似的行为。

    UPDATE Device
    SET Col1 = l.Col1
        ,Col2 = l.Col2
        ,Col3 = l.Col3
    FROM dbo.Device
        OUTER APPLY (
            SELECT MAX(Id) AS [Id]
            FROM dbo.Logs 
            WHERE Logs.Device_FK = Device.Id
            GROUP BY Logs.Device_FK
        ) lastLog
        OUTER APPLY (
            SELECT Col1, Col2, FORMAT(Col3) AS "Col3"
            FROM dbo.Logs
            WHERE Logs.Id = lastLog.Id
        ) l
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2017 query-performance

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