笔记记录自林晓斌(丁奇)老师的《MySQL实战45讲》

(本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除)

11) --怎么给字符串字段加索引?

  日常工作中的登录系统,你很可能会使用emai这个字段。因此也很容易遇到类似这样的语句:

mysql> select *from user where email = 'xxx';

  我们知道,如果没有索引那就只能使用全表扫描。并且MySQL是支持前缀索引的,也就是说,你可以顶一个字符串的一部分作为索引。默认地,如果你创建索引的语句不指定前缀长度,那么索引就会包含整个字符串。由于email字段通常较长,如果你直接使用email作为索引的话,索引占用的空间就会较大。所以可以采用前缀索引的优势,比如,建立索引email(6),每个邮箱字段只取前6个字节。但这也会带来损失,如你可能会增加额外的记录扫描行数。因为前6位相同的邮箱就没办法直接通过eamil的索引来判断了。因此我们建议使用前缀索引,定义好长度,就可以做到既节省空间,又不用额外增加太多的查询成本。

前缀索引对覆盖索引的影响:

  我们知道,普通索引存储的是主键索引的值,因此,如果你不是select* 而是select id,email就可以不进行回表,也就是覆盖索引。但此处有一个隐藏的问题,即,如果你使用了email字段来作索引,没问题可以利用覆盖索引的性质来进行快速的查询。但如果你使用的是前缀索引email(255),(我们db中的email数据的长度均不超过它),虽然索引覆盖了全部长度的email的值,还是不能使用覆盖索引的性质。因为系统并不确定前缀索引是否截断了完整的信息,因此必须进行回表。

其他方式:

  当然,你也可能会遇到字段的前缀区分度不够高的情况。如我们国家的身份证号,对于同一个城市的人,身份证号前几位的区分度很低。此时,你可以有别的方式来进行处理如:

  • 使用倒序来存储数据。
  • 使用Hash字段存储。

  这两种方式的相同点是都不支持范围查询,并且都提供了足够多的区分度。另外,Hash计算的结果虽有冲突的可能,但概率很低,因此可以认为每次查询的扫描行数接近1.但使用Hash的方式会额外增加计算的消耗以及额外的存储空间的消耗。

上期问题:

  如果没有session A的配合,只是单独执行 delete from t; call idata(); explain这三条语句,会看到explain结果中rows字段其实还是再10000左右,即使用了索引,这是为什么呢?

  答:delete语句删掉了所有的数据,然后通过call idata()插入了10万行数据,看上去是覆盖了原来的10万行。但是,session A开启了事务并没有提交,所以之前插入的10w行数据不能删除,这样,之前的数据每一行都会有两个版本,旧版本是delete之前的数据,新版本是标记为delete的语句。这样索引a上的数据其实是有两份的。由于Mysql是使用删除标记来删除记录的,并不从索引和数据文件中真正删除。如果delete和insert中间的间隔相对较小,purge线程还没来得及清理记录。如果主键相同的情况下,新insert会沿用delete之前的记录空间,因此统计信息不变。

问题:

  如果你要维护学生信息的数据库,学生登录名统一是"学号@gamail.com",学号的规则是十五位的数字,前三位是城市编号,四到六位是学校编号,七到十位是入学年份,最后五位是顺序编号,只考虑登录验证的话,你会怎么设计这个登录名的索引呢?

MySQL 笔记整理(11) --怎么给字符串字段加索引?的更多相关文章

  1. MySQL:字符串字段加索引

    1. 使用方式 1.1 全字段加索引 给整个字段加索引,索引存储整个字段的值. 数据量较小时,查询成本高,准确度高: 数据量较大时,比较耗费空间: 1.2 前缀索引 MySQL支持前缀索引,可以定义字 ...

  2. 最全mysql笔记整理

    mysql笔记整理 作者:python技术人 博客:https://www.cnblogs.com/lpdeboke Windows服务 -- 启动MySQL net start mysql -- 创 ...

  3. mysql中一半会选择什么样的字段为索引?(含索引创建删除查看公式)

    一.数据量庞大的数据做索引 二.该字段经常出现在where的后面,以条件形式存在,经常被用户搜索的字段 三.很少被增删改的字段,因为增删改后,索引会重新排序 索引的创建 create index 索引 ...

  4. MySQL性能优化 - 别再只会说加索引了

    MySQL性能优化 MySQL性能优化我们可以从以下四个维度考虑:硬件升级.系统配置.表结构设计.SQL语句和索引. 从成本上来说:硬件升级>系统配置>表结构设计>SQL语句及索引, ...

  5. MySQL 笔记整理(18) --为什么这些SQL语句逻辑相同,性能却差异巨大?

    笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 18) --为什么这些SQL语句逻辑相同,性能却差异巨大? 本篇我们以三 ...

  6. MySQL 笔记整理(5) --深入浅出索引(下)

    笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> 5) --深入浅出索引(下) 这次的笔记从一个简单的查询开始: 建表语句是这样的 mysql> create table T ...

  7. MySQL 笔记整理(1) --基础架构,一条SQL查询语句如何执行

    最近在学习林晓斌(丁奇)老师的<MySQL实战45讲>,受益匪浅,做一些笔记整理一下,帮助学习.如果有小伙伴感兴趣的话推荐原版课程,很不错. 1) --基础架构,一条SQL查询语句如何执行 ...

  8. MySQL 笔记整理(10) --MySQL为什么有时会选错索引?

    笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 10) --MySQL为什么有时会选错索引? MySQL中的一张表上可以 ...

  9. MySQL 笔记整理(2) --日志系统,一条SQL查询语句如何执行

    笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> 2) --日志系统,一条SQL查询语句如何执行 MySQL可以恢复到半个月内任意一秒的状态,它的实现和日志系统有关.上一篇中记录了一 ...

随机推荐

  1. 优化:mysql查询最近一条记录

    下策--查询出结果后将时间排序后取第一条 select * from a where create_time<="2017-03-29 19:30:36" order by ...

  2. Eureka的基本功能和用法

    1.基础架构 eueka按逻辑上可以划分为3个模块,eureka-server,service-provider,service-consumereureka-server:服务端,提供服务注册和发现 ...

  3. ALS交替最小二乘法总结

    摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 6.适用场合 内容: 1.算法概述 ALS是alternating least squares的缩写 , 意 ...

  4. [PHP] debug_backtrace()可以获取到代码的调用路径追踪

    查看代码的时候,看到有使用这个函数,测试一下 1.debug_backtrace()可以获取到代码的调用追踪,以数组形式返回 2.debug_print_backtrace() — 打印一条回溯,直接 ...

  5. DRUID连接池配置详情

    DRUID介绍 DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0.DBCP.PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针 ...

  6. windows一机多装mysql,5.5+版本,8.0.11版本

      00.安装第一个mysql,压缩版或者安装版,过程省略,目录如下: 运行中输入“regedit” 进入后,找到      HKEY_LOCAL_MACHINE\SYSTEM\CurrentCont ...

  7. Lnmp一键脚本

    #!/bin/bash #================================================================ # Copyright (C) 2018 A ...

  8. 操作系统:diskpart常用指令(使用diskpart实现分区管理)

    配合磁盘管理一起食用,效果最佳.(我的电脑右键 -> 管理 -> 磁盘管理) status:列出主要命令 list:列出list下的命令 select disk 0:选择第一块磁盘 lis ...

  9. 【Teradata TTU】Windows TTU安装工具列表

    Version Display Name-------------------------------------------------------------------------------- ...

  10. kerberos环境storm配置:Running Apache Storm Securely

    Running Apache Storm Securely Apache Storm offers a range of configuration options when trying to se ...