VARCHAR字段指定索引长度
发布日期:2022-02-22 18:04:21 浏览次数:7 分类:技术文章

本文共 1034 字,大约阅读时间需要 3 分钟。

一、概述

在varchar字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据实际文本区分度决定索引长度 --《阿里开发手册》

二、指定索引长度

2.1 建立测试表

  • 建立一张my_user表
CREATE TABLE my_user (	id BIGINT UNSIGNED,	user_name VARCHAR(50),	PRIMARY KEY (id))

2.2 插入测试数据

INSERT INTO	my_userVALUES(1, "火萤, keep your fire"),(2, "寒芒, 锋利的剑"),(3, "皓月, 同一轮月与对你的思念"),(4, "波光, 海边的慢时光"),(5, "极光, 奇幻之境"),(6, "黑耀, 能量内敛"),(7, "恒星, 驱散阴霾"),(8, "流星, 梦与幻想"),(9, "落霞, 落幕"),(10, "白雪, 寂静之地的审判"),(11, "皓月, 梦与幻想"),(12, "黑耀, 同一轮月与对你的思念"),(13, "海边的慢时光, 恒星"),(14, "极光,锋利的剑")

2.3 区分度测试

2.3.1 LEFT()函数简介

MySQL的LEFT()函数是一个字符串函数,它返回具有指定长度的字符串的左边部分。

LEFT(str, length);
两个参数的含义:

  • str:一个字符串
  • length:想要截取的长度,是一个正整数

2.3.2 开始测试

  • 对user_name字段截取长度为1
SELECT	COUNT(DISTINCT LEFT(user_name, 1)) / COUNT(*)FROM	my_user

SQL说明: 截取user_name字段左边第一位,然后统计其去重后的数目(DISTINCT 去重),用该数目除以表中总数据量,得到区分度

区分度:0.7857

  • 对user_name字段截取长度为4
SELECT	COUNT(DISTINCT LEFT(user_name, 4)) / COUNT(*)FROM	my_user

区分度:0.8571

2.3.3 测试结果总览

索引长度 区分度
1 0.7857
4 0.8571

2.3.4 推荐索引长度

“索引的长度与区分度是一对矛盾体,一般对字符串类型数据,长度为20的索引,区分度会高达90%” --《阿里开发手册》

2.4 创建索引

eg:

CREATE INDEX 索引名 ON 表名 (列名(长度))

转载地址:https://blog.csdn.net/dongli_1996/article/details/103727886 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:业务上具有唯一特性的字段,为什么要使用唯一索引
下一篇:Arrays.asList()与UnsupportedOperationException异常

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年03月20日 10时19分20秒