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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年03月20日 10时19分20秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
CSDN日报190919:游戏开发、数据库、架构干货分享
2019-04-26
CSDN日报190920:React Native发布新一代JS引擎Hermes
2019-04-26
CSDN日报190923:盘点那些被AI换脸、一键“脱”衣所滥用的AI模型
2019-04-26
CSDN日报190924:深度学习、开发干货分享
2019-04-26
PAT (Advanced Level) 1001 A+B Format (20 分)
2019-04-26
机器学习面试题第一天
2019-04-26
window10 caffe cpu-only安装
2019-04-26
YOLO-V3 Bbox预测解读
2019-04-26
论如何做到轻量级网络(Unet为例)
2019-04-26
Mask RCNN简图
2019-04-26
Cascade RCNN
2019-04-26
牛顿法
2019-04-26
对深度学习目前以及未来的看法 (AI时代可能延后,但总会到来)
2019-04-26
计算机网络应用层笔记
2019-04-26
地址栏输入网址enter查询后发生了什么
2019-04-26
计算机网络链路层知识点
2019-04-26
冲突域和广播域
2019-04-26
3NF分解(无损+4NF)
2019-04-26
计算机各层网络协议
2019-04-26
划分子网的意义
2019-04-26