• MSSQL中IN是否用索引.....[转]


    作者:no_mIss

    用MSSQL时间快一年了,数据量有时会相对比较多,所以经常要优化,也看过很多资料,但大都有一句:IN、NOT IN不用索引,今天发此贴希望能有人参与讨论,到底IN用不用索引,如果用,在什么情况下用索引,在什么情况下不用索引。

    前提:
    表[Table]
    字段[id] INT PRIMARY KEY 聚集索引

    以下写法:
    SELECT * FROM [Table] WHERE id = 1
    肯定用索引对吧。

    再看下面的三个写法:
    SELECT * FROM [Table] WHERE id = 1 or id = 2
    SELECT * FROM [Table] WHERE id IN (1,2)
    SELECT * FROM [Table] WHERE id = 1 UNION SELECT * FROM [Table] WHERE id = 2
    我可以很负责的告诉你:都用索引
    第二种写法MSSQL会自动优化为:id = 1 or id = 2 ,而不会全表扫描

    下面这个写法:
    SELECT * FROM [Table] WHERE id NOT IN (1,2)
    我也可以很负责的告诉你:用索引

    说到这里,不得不说很多SQL优化的资料都太老了,MSSQL2K以后早改进了。
    我们在T_sql时到底靠什么来优化程序呢,我告诉你:
    就是参考执行计划和对IO读写中的逻辑读一项
    即:
    SET STATISTICS IO ON/OFF
    SET SHOWPLAN_ALL ON/OFF

    先写一点,子查询用不用索引,先不写。
    请拍砖。。。。。。 

    后记:

    没有人给我一个定论,于是我暂相信自己如下: 
    表[table]
    字段[id] PRIMARY KEY
    MSSQL2005默认情况下:

    以下写法均用索引:

    SELECT * FROM [table] WHERE id IN (1,2)

    SELECT * FROM [table] WHERE id =1 OR id =2

    SELECT * FROM [table] WHERE id NOT IN (1,2)

    SELECT * FROM [table] WHERE id = 1
    UNION
    SELECT * FROM [table] WHERE id = 2

    SELECT * FROM [table] WHERE id IN (SELECT ID FROM [table_other] WHERE ...)


    只有下面的这条不用索引:
    SELECT * FROM [table] WHERE id NOT IN (SELECT ID FROM [table_other] WHERE ...)

    --------------------- 本文来自 no_miss 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/no_mIss/article/details/1327771?utm_source=copy 

  • 相关阅读:
    CF698C LRU
    关于 Exists 的几种嵌套查询
    React中使用useState()导致的问题记录
    react报错:Legacy context API has been detected within a strict-mode tree.
    vue-cli3.0 + typescript 构建项目
    VUE3.0 + TS 项目实战 (2)基本写法
    vue图片剪辑
    实现直播间消息评论滚动,顶部消失效果
    js 实现数组元素交换位置
    JS树结构操作:查找、遍历、筛选、树结构和列表结构相互转换,删除对应数据
  • 原文地址:https://www.cnblogs.com/railgunman/p/9702947.html
Copyright © 2020-2023  润新知