浅析SQL SERVER执行计划中的各类怪相

2022-10-13 00:00:00 索引 执行 扫描 查找 计划

在查看执行计划或调优过程中,执行计划里面有些现象总会让人有些疑惑不解:

    1:为什么同一条SQL语句有时候会走索引查找,有时候SQL脚本又不走索引查找,反而走全表扫描?

    2:同一条SQL语句,查询条件的取值不同,它的执行计划会一致吗?

    3: 同一条SQL语句,其执行计划会变化,为什么

    4: 在查询条件的某个或几个字段上创建了索引,执行计划就一定会走该索引吗?

    5:同时存在几个索引,SQL语句会走那个索引?

     ............................................................

有时候如果要跟别人解释清楚这些问题,如果不通过一些案例或例子来解说,很难阐述清楚,一方面是表达能力问题。另外一方面,再华丽的语言也难敌眼见为实,毕竟人接受信息大部分通过眼睛,小部分通过耳朵。眼见为实耳听为虚吗!

下面来看一个简单的例子,为什么我在对应的查询字段上建有索引,但是它不走索引反而走全表扫描。

DROP TABLE TEST 
   CREATE TABLE TEST (OBJECT_ID  INT, NAME VARCHAR(8));
 
   CREATE INDEX PK_TEST ON TEST(OBJECT_ID) 
   DECLARE @Index INT =0;
 
WHILE @Index < 20
BEGIN
    INSERT INTO TEST
    SELECT @Index, 'kerry';
    
    SET @Index = @Index +1;
END
 
 
UPDATE STATISTICS TEST WITH FULLSCAN
 
SELECT * FROM TEST WHERE OBJECT_ID=1

相关文章