zoukankan      html  css  js  c++  java
  • MYSQL哪些情况下会忽略索引

    如何检查SQL语句是否用到索引?

    使用“EXPLAIN sql语句”进行调试,查看possible_keys或key
    possible_keys:可能应用的索引
    key:实际使用的索引

    哪些情况下索引会被忽略

    1. 前导LIKE 语句
      前导模糊查询不生效 (如 like '%XX'或者like '%XX%')

    //生效
    explain select * from cartoon where `name` like '家里来了位道长大人%'
    //不生效
    explain select * from cartoon where `name` like '%555%'
    
    1. “or“ 条件

    2. “in“ 条件

    3. “<>“ 不等于判断

    4. “between“ 范围条件,可使用 where xx> 1 and xx<3代替

    5. IS NULL 或 IS NOT NULL,判断为空

    6. 不能在索引上做任何操作(计算、函数、自动/手动类型转换)


    MYSQL索引类型

    索引类型

    1. 普通索引 (index)

    2. 唯一索引 (unique)

    在普通索引的基础上,会进行排除重复值

    3. 主键索引 (primary key)

    和唯一索引的区别在于一个表里只能有一个主键索引,但是唯一索引可以有多个。

    4. 组合索引

    ALTER TABLE table_name ADD INDEX index_name ( column1column2column3 )

    5. 全文索引 (fulltext)

    普通索引/唯一索引/主键索引 哪个速度更快?

    速度是一样的快,因为三者都是采用btree二叉树算法进行查找。

    2种索引算法

    BTREE算法

    Innodb和MyISAM默认的索引是BTREE索引
    采用二叉树算法,左边的树枝小于根节点关键词,右边大于根节点,两边的树的深度不大于1,从而降低时间复杂度。

    HASH算法

    Mermory默认的索引是Hash索引
    Hash索引只能用于HASH值比较,例如=,<> 操作符,不像BTREE索引需要从根节点到枝节点,最后才能访问到页节点这样多次IO访问,所以检索效率远高于BTREE索引。

    为什么不默认采用HASH索引呢?

    HASH只能用在=和<>上,所以功能受限,所以默认采用BTREE。

  • 相关阅读:
    SQL Server没有足够的内存继续执行程序 (mscorlib)的解决办法
    在IIS上搭建WebSocket服务器(一)
    端口号被占用
    2018年 年度总结
    一个人颓废的九大根源
    Arrays.asList() 踩坑
    电脑关机命令
    div 悬浮
    ajax中 踩过的坑
    oracle 密码过期问题
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15452936.html
Copyright © 2011-2022 走看看