SQL SERVER中关于OR会导致索引扫描或全表扫描的浅析

王朝学院·作者佚名  2016-05-25
窄屏简体版  字體: 小  |  中  |  大  |  超大  

SQL SERVER中关于OR会导致索引扫描或全表扫描的浅析 2015-08-02 18:31 by 潇湘隐者, ... 阅读, ... 评论, 收藏, 编辑 在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走全表扫描。具体情况具体分析,不要套用教条。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航