5分钟,告诉你MySQL字符串怎么做索引

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

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

[[321169]]

 

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

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

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

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

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

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

责任编辑:华轩 来源: 今日头条
相关推荐

2017-10-10 16:22:21

主板芯片硬件

2021-11-09 23:27:45

版本设计ABtest

2021-11-07 23:46:32

MySQLSQL索引

2021-11-11 15:03:35

MySQLSQL索引

2021-10-20 17:44:57

分析模型回归

2017-11-20 10:25:20

数据库MySQL索引

2018-01-11 11:45:00

数据库MySQL字符集

2019-05-08 14:02:52

MySQL索引查询优化数据库

2021-10-21 23:06:57

Python字符串开发

2017-05-23 09:06:00

CIO超融合服务器

2012-06-28 10:26:51

Silverlight

2021-02-16 09:17:40

VimLinux编辑器

2021-04-23 09:50:41

topLinux命令

2020-12-08 10:02:25

RESTfulAPI开发

2017-07-06 08:12:02

索引查询SQL

2023-01-03 08:36:34

MySQL索引

2011-06-12 18:30:07

投影机技巧

2016-09-13 20:58:41

MySQ基础入门Sql

2019-04-01 14:01:13

B+树索引哈希索引算法

2020-09-14 11:30:26

HTTP3运维互联网
点赞
收藏

51CTO技术栈公众号