小编wal*_*j19的帖子

为什么SQL评估WHERE子句是否为False?

我在SQL(2008)中有一个查询,我无法理解为什么要花这么长时间来评估我是否在WHERE语句中包含一个不应该影响结果的子句.以下是查询示例:

declare @includeAll bit = 0;

    SELECT
        Id
        ,Name
        ,Total
    FROM
        MyTable
    WHERE
        @includeAll = 1 OR Id = 3926
Run Code Online (Sandbox Code Playgroud)

显然,在这种情况下,@ includeAll = 1将评估为false; 但是,包括这会增加查询的时间,就像它总是如此.无论有没有该子句,我得到的结果是正确的:我只获得Id = 3926的1条目,但是(在我的真实世界查询中)包括该行将查询时间从<0秒增加到大约7分钟......因此它似乎正在运行查询,就好像该语句是真的,即使它不是,但仍然返回正确的结果.

任何可以解决的光都会有所帮助.另外,如果您有解决方法的建议,我会接受它.我希望有一个像这样的子句,以便我可以在存储过程中包含一个参数,使其忽略它所拥有的Id,如果设置为true则返回所有结果,但我不能允许它影响只是试图获得一条记录时的表现.

sql sql-server sql-server-2008

8
推荐指数
1
解决办法
1264
查看次数

标签 统计

sql ×1

sql-server ×1

sql-server-2008 ×1