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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 深圳外包公司名单

    深圳外包公司名单深圳外包公司名单

    2022年5月31日
    102
  • 用西尔特编程器解密芯片_配方法解一元二次方程

    用西尔特编程器解密芯片_配方法解一元二次方程z3-solver是由MicrosoftResearch(微软)开发的SMT求解器,它用于检查逻辑表达式的可满足性,可以找到一组约束中的其中一个可行解,缺点是无法找出所有的可行解(对于规划求解问题可以是scipy)。z3-solver可应用于软/硬件的验证与测试、约束求解、混合系统的分析、安全、生物,以及几何求解等问题。Z3主要由C++开发,提供了.NET、C、C++、Java、Python等语言调用接口,下面以python接口展开讲解。……

    2022年10月13日
    2
  • js 字符串转json对象_json字符串转java对象

    js 字符串转json对象_json字符串转java对象js对象转json字符串将js对象转为json格式的字符串,可以用JSON.stringify方法。varuser1={‘height’:170,’name’:’张三’};varuser1Str=JSON.stringify(user1)console.info(user1Str)typeofuser1Str使用typeof来获取对象user1Str的类型,能看到控制台输出的user1的值以及它的类型string。{“height”:170,“name”:“张三”}“s

    2022年9月17日
    2
  • 推断js中的类型:typeof / instanceof / constructor / prototype

    推断js中的类型:typeof / instanceof / constructor / prototype

    2021年12月6日
    41
  • jupyter notebook的安装与使用

    jupyter notebook的安装与使用最近由于项目需要,开始学习python,然后发现一个非常有用的python交互式编辑器,非常容易上手而且非常有用和实在,本博文是对学习jupyternotebook的一个汇总和记录,与大家一起分享!下面的内容是针对ubuntu系统的,当然,jupyternotebook在windows也是支持的。

    2022年6月8日
    26
  • 使用AnalyticDB MySQL创建数据库及表过程

    使用AnalyticDB MySQL创建数据库及表过程简介目标是让云上数据仓库用户及开发者通过简单的步骤体验基于AnalyticDBMySQL版和DMS构建云原生数据仓库的主要流程,场景将通过实例的开通、结构与数据的初始化、报表的开发、报表可视化等环节,用3个具体的应用场景来体验AnalyticDBMySQL版在新零售场景下的交互查询和ETL计算速度,以及通过DMS进行数据仓库数据报表开发的流程。提供的数据集是一个零售场景的模拟数据,包括客户信息、订单记录、货物信息、国家地域信息等内容,数据总量10GB,最大数据表记录数为5999万条。产品简介云原

    2022年9月17日
    5

发表回复

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

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