前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MYSQL哪些情况下会忽略索引

MYSQL哪些情况下会忽略索引

作者头像
码农编程进阶笔记
发布2021-07-20 17:04:07
6820
发布2021-07-20 17:04:07
举报

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

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

哪些情况下索引会被忽略

  1. 前导LIKE 语句 前导模糊查询不生效 (如 like '%XX'或者like '%XX%')
代码语言:javascript
复制
//生效
explain select * from cartoon where `name` like '家里来了位道长大人%'
//不生效
explain select * from cartoon where `name` like '%555%'

2. “or“ 条件

3. “in“ 条件

4. “<>“ 不等于判断

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

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

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

MYSQL索引类型

索引类型

1. 普通索引 (index)

2. 唯一索引 (unique)

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

3. 主键索引 (primary key)

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

4. 组合索引

ALTER TABLE table_name ADD INDEX index_name ( column1, column2, column3 )

5. 全文索引 (fulltext)

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

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

2种索引算法

BTREE算法

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

HASH算法

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农编程进阶笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何检查SQL语句是否用到索引?
  • 哪些情况下索引会被忽略
  • MYSQL索引类型
    • 索引类型
      • 1. 普通索引 (index)
      • 2. 唯一索引 (unique)
      • 3. 主键索引 (primary key)
      • 4. 组合索引
      • 5. 全文索引 (fulltext)
    • 普通索引/唯一索引/主键索引 哪个速度更快?
      • 2种索引算法
        • BTREE算法
        • HASH算法
      • 为什么不默认采用HASH索引呢?
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档