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 

  • 相关阅读:
    react萌新的读书笔记(一)
    python 读取目录下的文件
    scrapy爬虫入门
    iPad和iPhone如何保护自己的隐私?
    郭盛华动真格了!新公司获百亿融资,网友:还招人不
    僵尸网络瞄准Linux服务器
    中美黑客谁更强?揭秘郭盛华与凯文的传奇故事
    VMware新致命漏洞,黑客可远程控制你的系统
    中国两大网络守护神,为祖国默默付出着,向他们致敬!
    Web应用程序已成为黑客的首要目标
  • 原文地址:https://www.cnblogs.com/railgunman/p/9702947.html
Copyright © 2011-2022 走看看