zoukankan      html  css  js  c++  java
  • 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 

  • 相关阅读:
    Linux实时性分析-schedule-调度器
    中断解析
    网络商城-PrestaShop
    和学生的学习互动记录(10嵌)
    QQ记录
    Windows7硬盘安装Fedora16图文教程
    今目标登录时报网络错误E110
    vs环境配置——vs快捷键配置——vs插件配置——vs环境设置
    如何防止app接口被别人调用
    mvc4 找到多个与名为“xx”的控制器匹配的类型
  • 原文地址:https://www.cnblogs.com/railgunman/p/9702947.html
Copyright © 2011-2022 走看看