比如各位昨天回答我的那个问题,第三个SELECT 1 FROM person WHERE id=1 AND first_name='2',SQL会判断这两列哪个索引效率高,最终使用效率高(id聚集索引)的那个,然后表扫描SELECT 1 FROM person WHERE id=1 的结果,在其中筛选first_name='2'(做了非聚集索引)的记录,而筛选的过程不会用到first_name='2'的非聚集索引,请问我的理解对吗?

解决方案 »

  1.   

    具体可以自己试下,按ctrl+l看执行计划
      

  2.   

    哦,如果这个语句只显示聚集索引扫描的话,那就是没有走那个first_name='2'的非聚集索引
      

  3.   

    是的,都走到会都显示index scan的
      

  4.   


    可是为什么不在WHERE id=1结果中走那个first_name='2'的非聚集索引,那不是更快
      

  5.   

    你忽略了1楼
    要看first_name='2'的重复次数的,比如first_name总共数目100条,90条都等于'2',那走索引也没什么意义,肯定选择表扫描
      

  6.   


    多谢卡神指导,我插入了很多条GUID的记录,果然用到了那个非聚集索引最后还有个问题,直接用SELECT 1 FROM person WHERE first_name='1' (first_name是非聚集索引)貌似不管表中重复的几率大或小,他会直接使用first_name的非聚集索引扫描,是吗?
      

  7.   

    他会直接使用first_name的非聚集索引查找不是扫描,打错了,是吗?
      

  8.   


    高手哥,SELECT 1 FROM person WHERE first_name='1' (first_name是非聚集索引),直接使用first_name的非聚集索引查找,应该SQL的内部机制吧,就是这么规定的