系列文章
三、MySQL强人“锁”难《死磕MySQL系列三》
四、S锁与X锁的爱恨情仇《死磕MySQL系列四》
五、如何选择普通索引和唯一索引《死磕MySQL系列五》
六、五分钟,让你明白MySQL是怎么选择索引《死磕MySQL系列六》
相信大多数小伙伴跟咔咔一样,给字符串添加索引从未设置过长度,今天就来聊聊如何正确地给字符串加索引。
一、如何建立索引大多数系统都会存在用户表,并且系统初始设计使用了手机号码登录的。
这是产品提出了一个需求,让系统也可以支持邮箱登录。
肯定知道的是若不给邮箱字段添加索引执行查询是会全表扫描。
此时你心里窃喜这还不简单,给邮箱字段加个索引完事呗!但要做到复杂的需求做好,简单的需求要最好,减轻一切对系统的压力。
此时的你拿起键盘就执行了altertabletable_nameaddindexidx_field(field)
有部分小伙伴不喜欢命令行创建索引,喜欢使用phpmyadmin工具来操作MySQL,那么在建立索引时有没有发现后边可以设置大小呢?
通过上边给大家展示的图片知道字符串建立索引是可以定义长度的,那么两者有什么区别。
使用命令行直接创建的索引默认是包含整个字符串。
若这样执行就制定了索引前缀长度altertabletable_nameaddindexidx_field(field(6))
一图解千愁,看一下建立的两个索引结构是什么样的。
索引一结构图
索引二结构图
从图中可以看到,指定了索引长度为6那么就只取邮箱字段的前6个字段,相对索引包含整个字符串来说每个节点存储的数据会更多。
索引那篇文章也给大家说了建立索引在合适的范围内越小越好。
万物皆两面,有坏就有好,第六期文章误选索引的因素之一就是扫描行数。
索引长度减少带来的影响就是索引基数变大,从而增加额外的扫描记录数(执行explain的row字段)。
此时要执行selectid,name,emailfrommac_userwhereemail=
qq.