在SQL SERVER的查询语句中使用OR是否会导致不走索引查找(Index Seek)或索引失效(堆表走全表扫描 (Table Scan)、聚集索引表走聚集索引扫描(Clustered Index Seek))呢?是否所有情况都是如此?又该如何优化呢? 下面我们通过一些简单的例子来分析理解这些现象。下面的实验环境为SQL SERVER 2008,如果在不同版本有所区别,欢迎指正。
堆表单索引
首先我们构建我们测试需要实验环境,具体情况如下所示:
DROPTABLE TEST
CREATETABLE TEST (OBJECT_ID INT, NAME VARCHAR(32));
CREATEINDEX PK_TEST ON TEST(OBJECT_ID)
DECLARE @IndexINT =0;
WHILE @Index < 500000
BEGIN
INSERT INTO TEST
SELECT @Index, 'kerry'+CAST(@IndexASVARCHAR(6));
SET @Index = @Index +1;
END
UPDATESTATISTICS TEST WITH FULLSCAN
场景1:如下所示,并不是所有的OR条件都会导致SQL走全表扫描。具体情况具体分析,不要套用教条。<
新闻热点
疑难解答