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。

  • 相关阅读:
    jQuery 基本选择器
    JavaScriptif while for switch流程控制 JS函数 内置对象
    JavaScrip基本语法
    数据库 存储引擎 表的操作 数值类型 时间类型 字符串类型 枚举集合 约束
    数据库基础知识 管理员 用户登录授权的操作
    粘包的产生原理 以及如何解决粘包问题
    socket TCP DPT 网络编程
    2018年年终总结
    Android技术分享
    No accelerator found
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15452936.html
Copyright © 2011-2022 走看看