很多程序员都不喜欢字符串,我也是,字符串处理起来太麻烦了,而且字符串也比较占空间。举个例子,一个字符要占1个字节,但一般常用字符就那么几个(例如我们常要求用户名只能是大小写字母与数字)。另外一个问题,就是数据库查询的时候,用字符串查询太不方便了。今天我们来了解下,数据库中的字符串查询问题。

在PC互联网时代,我们的很多账户都需要绑定电子邮箱,我们偶尔需要使用电子邮箱,也就是字符串来进行数据查询,为了保证查询效率,我们通常要对字符串字段建立索引。

我们都知道,在InnoDB中,通常使用的是B+树索引,如果索引的类型是字符串,那么我们可能会面临这样一个问题,索引的长度会变得特别长,索引的长度过长会让索引的索引占用更多的存储空间,同时也会增加索引的维护成本。通常我们使用字符串索引,只会使用前面若干个字符,假如用户的邮箱的开头是26个字母,并且用户名随机均匀分布的,那么我们即使使用第一个字符做索引,也能减少25/26的扫描量,假如使用前2个字符,就可以减少675/676次扫描。所以,即便我们只用前面的若干个字符,也能大大地减少数据库的扫描,提升查询速度。

但是在现实生活中,用户名往往不是随机分布的,像a开头的用户往往占比较大。有些字符串的字段,往往开头是相似的,例如居民的身份证号,前面几位数通常是省份跟城镇,教育局的学生信息,通常id是入学时间加月份,索引的选择最好要满足唯一性,我们最好能使用更有特色的字段进行索引的建立。

例如身份证的问题,我们知道,身份证的前6位通常是地区信息,全国的省市区加起来也就是几千个,而身份证的后六位是生日的日信息跟4个随机数字。那么,仅有30万分之一的概率后六位的数字是相同的。也就是说,如果把身份证号码逆序存储后,取前6位作为索引,可以减少近百分的数据扫描量,从而大大提升扫描的效率。

另外一种方法,就是建立哈希索引而不是B+树索引,哈希索引的好处是在于查询特定字符串的时候,几乎都只要查询一行数据。但是哈希索引的弊端是不支持范围查询,也不支持字符串匹配,假如的业务没有这样的场景,那可以使用哈希索引。

好了,今天我们简单地介绍了Mysql数据库中,字符串索引的使用。不知道对你是否有所启发,欢迎大家关注我,共同学习,共同进步。

【编辑推荐】

【责任编辑:华轩 TEL:(010)68476606】

点赞 0

mysql索引如何做_5分钟,告诉你MySQL字符串怎么做索引相关推荐

  1. db2 replace函数的用法_5 分钟快速掌握 MySQL 函数

    目录 1.MySQL中关于函数的说明 概念:类似java.python中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名: 好处:Ⅰ隐藏了实现细节:Ⅱ提高代码的重用性: 调用:select 函数名 ...

  2. mysql root用户可以同时几个人连接_重学MySQL系列(四):10分钟快速掌握MySQL用户与权限管理

    在这篇文章中,我们来聊聊怎么管理MySQL的用户及如何为不同用户分配不同的管理权限,其实,在日常使用MySQL的过程中,这部分的工作是由DBA(数据管理员)来完成的. 而我们作为一般的开发人员,只要拿 ...

  3. ppt python 图表_5分钟python:在PPT里做三联柱形图

    分钟说长不长,说短不短,可以学会对办公自动化的诀窍.在这个python的PPT专辑里,会教大家如何用python自动化一步步,一行行程序,手把手的编码说明,生成好看的PPT. 接上节的简单柱形图生成, ...

  4. python能做数据库开发吗_5分钟快速入门,用Python做SQLite数据库开发,附代码适合初学...

    1. 它是内置的,不需要安装,节省很多麻烦.2. 使用方便,不需要复杂的连接配置,打开本地文件一样简单.3.方便转移.数据库是一个文件.复制.传输和删除可以很容易地处理.4所示.轻量级的性能比大多数其 ...

  5. python建立sqlite数据库_5分钟快速入门,用Python做SQLite数据库开发,附代码适合初学...

    1.它内置,无需安装,省了很多麻烦. 2.使用方便,无需复杂的连接配置,和打开本地文件一样简单. 3.转移方便,数据库就是一个文件,复制.转移.删除都能简单处理 4.轻量级应用中性能优于多数其它的数据 ...

  6. mysql mgr应用场景_悄悄告诉你 MySQL MGR 牛在哪?

    大家听过 MySQL MGR 技术吗? MySQL 是目前最流行的开源关系型数据库,国内金融行业也开始全面使用,其中MySQL 5.7.17 提出的 MGR(MySQL Group Replicati ...

  7. 【mysql 最大连接数】5分钟快速修改mysql最大连接数

    修改最大连接数 vim /etc/my.cnf max_connections=5000 重启电脑: systemctl restart mysqld 查询当前最大连接数: show variable ...

  8. 五分钟告诉你什么是MySQL的覆盖索引

    文章目录 五分钟告诉你什么是MySQL的覆盖索引 覆盖索引 总结 参考 五分钟告诉你什么是MySQL的覆盖索引 前面我们已经对MySQL索引底层原理多少有一定的了解了,还不是很了解的小伙伴可以看我之前 ...

  9. 主键索引 or 辅助索引?一文告诉你 Mysql limit 优化时的索引选择!

    作者 | 吴海存 责编 | 徐威龙 封图| CSDN下载于视觉中国 导读: 本文主要针对limit分页时,是优先基于主键索引还是辅助索引等层面展开分析,对limit及offset的用法以及是否该用索引 ...

最新文章

  1. k8s实战之数据卷(volume)
  2. 为什么索引可以让查询变快,你有思考过吗?
  3. 适用于System Center 2016所需前期准备工作
  4. 【JavaScript 学习笔记】创建对象
  5. Maven编译代码的相关命令
  6. Java Web学习(二)数据加密
  7. 全志A33-修改linux kernel启动参数
  8. 小心使用 Task.Run 续篇
  9. java excel自动保存_比POI好用的EasyExcel简单使用记录
  10. @程序员,早知道假期这样你会干什么?
  11. python使用缩进来体现-Python使用缩进来体现代码之间的逻辑关系。
  12. MoosejawXRAY:让穿冬装的美女瞬间换上比基尼
  13. JavaWeb项目练习(一)——客户信息管理系统
  14. 使用python的视频处理
  15. 深度学习教程(15) | 自然语言处理与词嵌入(吴恩达·完整版)
  16. 计算机科学与技术学科带头人,计算机专业学科带头人—陆玉昌教授
  17. 20以内的加减法辅导
  18. 算法设计——用分治法查找数组元素的最大值和最小值、用分治法实现合并排序、最小费用问题、树的最大连通分支问题(代码实现)
  19. 滑动翻页效果实现和移动端click事件问题
  20. 用python对S曲线加减速建模

热门文章

  1. 数学建模第三节2020.4.17-5.3补
  2. java抽象类与接口5.4-5.7 2020.3.31
  3. MySQL---第07章_单行函数
  4. restful风格案例
  5. springmvc和mybatis面试题
  6. c++将int转换成string_Integer与int的区别 (== 与 equal)
  7. Struts2中将表单数据封装到List和Map集合中
  8. spring boot报错Invalid numeric value: Leading zeroes not allowed
  9. Windows11——Modern Standby(现代待机) S0改Suspend to RAM(待机到内存)S3睡眠解决方案
  10. Vue——全局element-resize-detector监听DOM元素