在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走全表掃描。具體情況具體分析,不要套用教條。<
新聞熱點
疑難解答