MYSQL哪些情况下会忽略索引[通俗易懂]

MYSQL哪些情况下会忽略索引

大家好,又见面了,我是全栈君。

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

使用“EXPLAIN sql语句”进行调试,查看possible_keys或key
possible_keys:可能应用的索引
key:实际使用的索引
MYSQL哪些情况下会忽略索引[通俗易懂]

哪些情况下索引会被忽略

  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。

MYSQL哪些情况下会忽略索引[通俗易懂]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111899.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 抽象工厂模式与工厂方法模式有哪些不同_工厂方法和抽象工厂

    抽象工厂模式与工厂方法模式有哪些不同_工厂方法和抽象工厂Abstract Factory动机实例模式定义结构要点总结笔记动机在软件系统中,经常面临着”一系列相互依赖的对象“的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作如果应对这种变换?如何绕过常规的对象创建方法(new),提供一种”封装机制“来避免客户程序和这种”多系列具体对象创建工作“的紧耦合?实例数据库连接的时候会有很多关联的对象,这些对象是一个整体朴素class EmployeeDAO{public: vector<EmployeeDAO> GetEm

    2022年8月9日
    4
  • mysql字符串截取指定字符串_sql查询截取字符串

    mysql字符串截取指定字符串_sql查询截取字符串Mysql字符串截取和截取字符进行查询一、MySQL中字符串的截取MySQL中有专门的字符串截取函数:其中常用的有两种:substring_index(str,delim,count)和concat1.substring_index(str,delim,count)函数的使用较为普遍。函数括号里面的依次为:要分隔截取的字符串(如:”aaa_bbb_

    2022年9月28日
    4
  • python的多线程是否没有用了[通俗易懂]

    python的多线程是否没有用了[通俗易懂]python的多线程是否就完全没有用了呢?相同的代码,为何有时候多线程会比单线程慢,有时又会比单线程快? 这主要跟运行的代码有关: 1、 CPU密集型代码 (

    2022年7月3日
    36
  • anaconda卡在initializing_6p报错9

    anaconda卡在initializing_6p报错9ERROR:Cannotuninstall’PyYAML’.Itisadistutilsinstalledprojectandthuswecannotaccuratelydeterminewhichfilesbelongtoitwhichwouldleadtoonlyapartialuninstall.啥也不说,就一条安装指令:pipinstall–ignore-installedPyYAML其他的坑,自辨吧…

    2022年8月30日
    5
  • spring aop用法_概念的种类

    spring aop用法_概念的种类SpringAOP入门——概念及注意点

    2022年8月11日
    3
  • 喉头梗阻的常见原因有哪六项_晕针的原因症状处理及预防

    喉头梗阻的常见原因有哪六项_晕针的原因症状处理及预防点击上方”IT牧场”,选择”设为星标”技术干货每日送达!每一个JVM线程都拥有一个私有的JVM线程栈,用于存放当前线程的JVM栈帧(包括被调用函数的参数、局部…

    2025年7月24日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号