zoukankan      html  css  js  c++  java
  • MySQL中IS NULL、IS NOT NULL、!=不能用索引?胡扯![转载]

    原文地址:https://juejin.im/post/6844903921450745863

    画重点:
    1. 那对于索引列值为NULL的二级索引记录来说,它们被放在B+树的哪里呢?答案是:放在B+树的最左边
    "We define the SQL null to be the smallest possible value of a field."

    2. 那既然IS NULLIS NOT NULL!=这些条件都可能使用到索引,那到底什么时候索引,什么时候采用全表扫描呢?

    答案很简单:成本

    成本组成主要有两个方面:

    • 读取二级索引记录的成本

    • 将二级索引记录执行回表操作,也就是到聚簇索引中找到完整的用户记录的操作所付出的成本。

    很显然,要扫描的二级索引记录条数越多,那么需要执行的回表操作的次数也就越多,达到了某个比例时,使用二级索引执行查询的成本也就超过了全表扫描的成本(举一个极端的例子,比方说要扫描的全部的二级索引记录,那就要对每条记录执行一遍回表操作,自然不如直接扫描聚簇索引来的快)。

     
    MySQL中决定使不使用某个索引执行查询的依据很简单:就是成本够不够小。而不是是否在WHERE子句中用了IS NULLIS NOT NULL!=这些条件。 
     
     
     
     
     
  • 相关阅读:
    browser浏览器类型判断
    泛型函数Func<>
    前台JS端排除重复录入数据方法(取值对比)
    判断字符串是否为空字符串
    Linq语法及用法
    new Array( ) 使用
    性能测试
    [排序N大件之]快速排序
    [排序N大件之]归并排序
    [排序N大件之]谢尔排序
  • 原文地址:https://www.cnblogs.com/dong320/p/13726407.html
Copyright © 2011-2022 走看看