VARCHAR字段指定索引长度

一、概述

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

二、指定索引长度

2.1 建立测试表

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

2.2 插入测试数据

INSERT INTO
	my_user
VALUES
(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 表名 (列名(长度))

你可能感兴趣的:(VARCHAR字段指定索引长度)