SQL Server检查任何行的where子句是否为true

SQL Server检查任何行的where子句是否为true,sql,optimization,sql-server-2014,spatial-query,Sql,Optimization,Sql Server 2014,Spatial Query,我将选择那些与任何铁路相交的省份。所以我这样做(使用SQL Spatial): 但它效率不高,因为它必须检查每一条铁路几何图形和省几何图形之间的交点,以便计算计数。但是,最好在检测到每个第一个交叉口时立即停止where子句,而无需检查其他交叉口。我的意思是: SELECT * FROM ProvinceTable WHERE ( --return true if this is true for any row in the RailroadTable: -- "Pr

我将选择那些与任何铁路相交的省份。所以我这样做(使用SQL Spatial):

但它效率不高,因为它必须检查每一条铁路几何图形和省几何图形之间的交点,以便计算
计数。但是,最好在检测到每个第一个交叉口时立即停止where子句,而无需检查其他交叉口。我的意思是:

SELECT * FROM ProvinceTable
WHERE (
       --return true if this is true for any row in the RailroadTable:
       -- "ProvinceTable.Shape.STIntersects(RailroadTable.Shape) > 1" 
      ) 
那么,有没有更好的方法来为这样一个目标重写这个查询呢

编辑 令人惊讶的是,此查询占用相同的时间,并且不返回任何行:


您要使用
存在

SELECT pt.*
FROM ProvinceTable pt
WHERE EXISTS (SELECT 1
              FROM RailroadTable rt
              WHERE pt.Shape.STIntersects(rt.Shape) = 1 
             );

您要使用
存在

SELECT pt.*
FROM ProvinceTable pt
WHERE EXISTS (SELECT 1
              FROM RailroadTable rt
              WHERE pt.Shape.STIntersects(rt.Shape) = 1 
             );

您要使用
存在

SELECT pt.*
FROM ProvinceTable pt
WHERE EXISTS (SELECT 1
              FROM RailroadTable rt
              WHERE pt.Shape.STIntersects(rt.Shape) = 1 
             );

您要使用
存在

SELECT pt.*
FROM ProvinceTable pt
WHERE EXISTS (SELECT 1
              FROM RailroadTable rt
              WHERE pt.Shape.STIntersects(rt.Shape) = 1 
             );


这些形状构造可以用于内部连接吗?如图所示,我认为这种想法并不能提高性能,因为必须使用内部联接检查每一行的交点。这些形状构造可以用于内部联接吗?如图所示,我认为这种想法并不能提高性能,因为必须使用内部联接检查每一行的交点。这些形状构造可以用于内部联接吗?如图所示,我认为这种想法并不能提高性能,因为必须使用内部联接检查每一行的交点。这些形状构造可以用于内部联接吗?如图所示,我认为这个想法并没有提高性能,因为必须使用内部联接检查每一行的交叉点。我以前检查过这个方法,但令人惊讶的是它没有返回任何行!此外,它需要的时间多达
count(*)
方法运行所需的时间@HosseinNarimaniRad支票需要
=1
。尽管如此,这仍然可以针对他们测试条件笛卡尔积。你有空间索引吗?@MartinSmith你说得对。没有,没有可用的空间索引。我更喜欢ed专注于查询优化我之前检查过这个方法,但令人惊讶的是它没有返回任何行!此外,它需要的时间多达
count(*)
方法运行所需的时间@HosseinNarimaniRad支票需要
=1
。尽管如此,这仍然可以针对他们测试条件笛卡尔积。你有空间索引吗?@MartinSmith你说得对。没有,没有可用的空间索引。我更喜欢ed专注于查询优化我之前检查过这个方法,但令人惊讶的是它没有返回任何行!此外,它需要的时间多达
count(*)
方法运行所需的时间@HosseinNarimaniRad支票需要
=1
。尽管如此,这仍然可以针对他们测试条件笛卡尔积。你有空间索引吗?@MartinSmith你说得对。没有,没有可用的空间索引。我更喜欢ed专注于查询优化我之前检查过这个方法,但令人惊讶的是它没有返回任何行!此外,它需要的时间多达
count(*)
方法运行所需的时间@HosseinNarimaniRad支票需要
=1
。尽管如此,这仍然可以针对他们测试条件笛卡尔积。你有空间索引吗?@MartinSmith你说得对。没有,没有可用的空间索引。我更喜欢ed专注于查询优化