zoukankan      html  css  js  c++  java
  • SQL优化关于or与in使用

    网上有很多人都在谈论or与in的使用,有的说二者没有什么区别,其实不然,估计是测试做的不够,其实or的效率为O(n),而in的效率为O(log2n),当基数越大时,in的效率就能凸显出来了。

    有人做了这么一组实验(测试库数据为1000万条记录):A组分别用or与in查询3条记录,B组分别用or与in查询120条记录,C组分别用or与in查询500条记录,D组分别用or与in查询1000条记录.

    第一种情况,目标列为主键的情况,4组测试执行计划一样,执行的时间也基本没有区别。
    A组or和in的执行时间: or的执行时间为:0.002s     in的执行时间为:0.002s
    B组or和in的执行时间: or的执行时间为:0.004s     in的执行时间为:0.004s
    C组or和in的执行时间: or的执行时间为:0.006s     in的执行时间为:0.005s
    D组or和in的执行时间: or的执行时间为:0.017s     in的执行时间为:0.014s

    第二种情况,目标列为一般索引的情况,4组测试执行计划一样,执行的时间也基本没有区别。
    A组or和in的执行时间: or的执行时间为:0.002s     in的执行时间为:0.002s
    B组or和in的执行时间: or的执行时间为:0.006s     in的执行时间为:0.005s  
    C组or和in的执行时间: or的执行时间为:0.008s     in的执行时间为:0.008s
    D组or和in的执行时间: or的执行时间为:0.020s     in的执行时间为:0.019s 

    第三种情况,目标列没有索引的情况,4组测试执行计划就不一样,执行的时间也有了很大的区别。
    A组or和in的执行时间: or的执行时间为:5.016s      in的执行时间为:5.071s
    B组or和in的执行时间: or的执行时间为:1min 02s     in的执行时间为:5.018s
    C组or和in的执行时间: or的执行时间为:1min 50s     in的执行时间为:5.010s

    D组or和in的执行时间: or的执行时间为:6min 13s     in的执行时间为:5.047s

    结论:

    in和or的效率,取决目标条件列是否有索引或者是否是主键,如果有索引或者主键性能没啥差别,如果没有索引,in的性能要远远优于or.

  • 相关阅读:
    模板学习系列(一)tuple
    apue读书笔记第十章
    在亚马逊上关于设计模式的一个评论
    编程珠玑笔记第12章习题
    编程珠玑第14章
    C#,.Net经典面试题目及答案
    sql where 1=1和 0=1 的作用(junyuz)
    快速排序算法
    一道面试题(C#实现了超大整数的加减乘法运算)
    数据结构实验之链表一:顺序建立链表
  • 原文地址:https://www.cnblogs.com/YuyuanNo1/p/11750512.html
Copyright © 2011-2022 走看看