美文网首页MySQL
61-MySQL索引优化与查询优化-字符串前缀索引

61-MySQL索引优化与查询优化-字符串前缀索引

作者: 紫荆秋雪_文 | 来源:发表于2022-11-04 13:21 被阅读0次

一、准备数据

CREATE TABLE teacher
(
    id    BIGINT UNSIGNED PRIMARY KEY,
    email VARCHAR(64)
);
  • 使用邮箱查询
DESC
SELECT *
FROM teacher
WHERE email = 'raven1991@qq.com';
  • DESC image.png
  • 由于email字段没有索引,只能做全表扫描

二、前缀索引

MySQL是支持前缀索引的。默认地,如果你创建索引的语句不指定前缀长度,那么索引就会包含整个字符串

#  整个字符串添加索引
ALTER TABLE teacher
    ADD INDEX index1 (email);

#  email字符串前6个字符添加索引
ALTER TABLE teacher
    ADD INDEX index2 (email(6));

2.1、这两种不同的定义在数据结构和存储上有什么区别呢?

index1.png index2.png

2.2、使用index1(即email整个字符串的索引结构),执行顺序是这样的

  • 1、从index1索引树找到满足索引值是’ zhangssxyz@xxx.com ’的这条记录,取得ID2的值
  • 2、到主键上查到主键值是ID2的行,判断email的值是正确的,将这行记录加入结果集
  • 3、取index1索引树上刚刚查到的位置的下一条记录,发现已经不满足email=' zhangssxyz@xxx.com ’的条件了,循环结束

2.3、如果使用的是index2(即email(6)索引结构),执行顺序是这样的

  • 1、从index2索引树找到满足索引值是’zhangs’的记录,找到的第一个是ID1
  • 2、到主键上查到主键值是ID1的行,判断出email的值不是’ zhangssxyz@xxx.com ’,这行记录丢弃
  • 3、取index2上刚刚查到的位置的下一条记录,发现仍然是’zhangs’,取出ID2,再到ID索引上取整行然后判断,这次值对了,将这行记录加入结果集
  • 4、 重复上一步,直到在idxe2上取到的值不是’zhangs’时,循环结束

相关文章

  • 61-MySQL索引优化与查询优化-字符串前缀索引

    一、准备数据 使用邮箱查询 DESCimage.png 由于email字段没有索引,只能做全表扫描 二、前缀索引 ...

  • MySQL,必须掌握的6个知识点

    目录 一、索引B+ Tree 原理 MySQL 索引 索引优化 索引的优点 索引的使用条件 二、查询性能优化使用 ...

  • 17.MySQL优化

    《高性能MySQL》——这本书都有的 “字段”优化总结 “索引”优化总结 索引的优化 “查询SQL”优化总结 “引...

  • MySQL(三)|《千万级大数据查询优化》第一篇:创建高性能的索

    MySQL优化一般是需要索引优化、查询优化、库表结构优化三驾马车齐头并进。可以说,索引优化是对查询性能优化最有效的...

  • 性能优化-索引

    概述 索引优化是对查询性能优化最有效的手段,索引能轻易将查询性能提高几个数量级。 索引类型 在Mysql中,索引是...

  • Mysql优化

    一.索引科普 主键索引 唯一索引 普通索引 单列索引 多列索引 聚簇索引 非聚簇索引 前缀索引 全文索引 二.优化...

  • MySQL优化(索引与查询优化)

    MySQL优化(索引与查询优化)[https://www.yuque.com/office/yuque/0/202...

  • 七、Mysql优化

    groupBy优化——filesort 联表优化——NLJ和BNL 索引查询优化——ICP

  • 性能调优之SQL优化

    性能调优之SQL优化如何加快查询速度?1、升级硬件2、根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的...

  • MySQL优化

    MySQL语句优化原则 1. 小表驱动大表(针对查询),可以减少IO 2. 最左前缀法则(针对索引),索引了多列的...

网友评论

    本文标题:61-MySQL索引优化与查询优化-字符串前缀索引

    本文链接:https://www.haomeiwen.com/subject/naretdtx.html