业务上具有唯一特性的字段,为什么要使用唯一索引
一、问题背景
阿里开发手册上提到了,“业务上具有唯一特性的字段,即使是多个字段的组合,也必须建立成唯一索引。不要以为唯一索引影响了insert速度,这个速度损耗可以忽略,但提高查找速度是明显的。”
- 唯一索引对insert影响是什么样的呢?
- 查找速度提升表现在什么地方?
接下来,让我们一起来探索吧…
二、问题分析
2.1 测试表建立
- 建立包含唯一索引的person表
CREATE TABLE person (id bigint(20) unsigned NOT NULL,id_num BIGINT(18) unsigned NOT NULL,PRIMARY KEY (id),UNIQUE KEY (id_num)
)
- 建立不包含唯一索引的person_plus表
CREATE TABLE person_plus (id bigint(20) unsigned NOT NULL,id_num BIGINT(18) unsigned NOT NULL,PRIMARY KEY (id)
)
2.2 插入数据速度分析
- 创建向person表插入100000条数据的存储过程
CREATE PROCEDURE one ()
BEGIN-- 定义变量DECLARE v_i int unsigned DEFAULT 1;WHILE v_i <= 100000 DOINSERT INTO person VALUES(v_i, v_i);SET v_i = v_i+1;END WHILE;
END
- 创建向person_plus表插入100000条数据的存储过程
CREATE PROCEDURE two()
BEGIN-- 定义变量DECLARE v_i int unsigned DEFAULT 1;WHILE v_i <= 100000 DOINSERT INTO person_plus VALUES(v_i, v_i);SET v_i = v_i+1;END WHILE;
END
- 执行存储过程one、two的结果
- 执行one
时间: 04:21.22 - 执行two
时间:04:11.61
- 结果分析
可以看出它们的INSERT速度相差无几。
2.3 查询速度分析
- 查询person表
SELECT*
FROMperson
WHEREid_num = 85000
查询时间: 0.034s
- 查询person_plus表
SELECT*
FROMperson_plus
WHEREid_num = 85000
查询时间: 0.059s
- SQL性能分析
- person查询语句分析
EXPLAIN SELECT*
FROMperson
WHEREid_num = 85000
type: const
- person_plus查询语句分析
EXPLAIN SELECT*
FROMperson_plus
WHEREid_num = 85000
type: ALL
- 结果分析
包含唯一索引的person查询时间为0.034s,访问类型为const、不包含唯一索引的person_plus查询时间为0.059s,访问类型为ALL。有关MySQL EXPLAIN命令的知识大家有兴趣可以百度一下。
时间:person 优于 person_plus
SQL性能:person 优于 person_plus
三、结论
使用唯一索引后,Insert速度损耗可以忽略,查找速度明显提升
业务上具有唯一特性的字段,为什么要使用唯一索引相关推荐
- elasticsearch(es)在用户画像业务上的应用【elasticsearch(es)性能调优】
1.关于用户画像 用户画像是以用户为中心,从不同角度抽取信息,抽象成标签.这些标签一般都会很多,针对不同的业务需求.应用场景会刻画不同的标签.可以通过标签来圈选适合的人群,来进行精准投放.广告系统.活 ...
- mysql主从复制原理详解_MySQL主从复制没使用过?三大步骤让你从原理、业务上理解透彻...
成长是一棵树,总是在你不知不觉的情况下快乐长大:成长是一株草,总是在你不知不觉的情况下长满大地:成长是一朵花,总是在你不知不觉的情况下开满山头. 这不,随着时间的迁移.项目网站的用户量.数据量持续上升 ...
- 重磅!腾讯云首次披露自研业务上云历程
导语:传统行业转型的过程中,腾讯向来扮演的是数字化助手的角色,腾讯云作为帮助企业数字化转型的入口,也已经成为腾讯的"独角兽"业务.然而伴随着云业务的增长,腾讯内部业务如何上云,对于 ...
- 分析方法的基础 — 3. 业务与管理的特性,分析与设计的抓手
拆分业务与管理的理由已经知道,想必大家经常会遇到这些词:财务管理.质量管理.物流管理.xx管理等,这些词在设计工作中可以分为两个部分去理解,即:财务&管理:质量&管理:物流&管 ...
- 传统企业PaaS平台功能设计与业务上云思考
伴随着Docker技术的兴起,以及容器集群管理平台Mesos.Kubernetes.Swarm.Rancher等的大行其道,仿佛PaaS平台及其相关技术一下进入了黄金时期,各种各样的技术组合,各种各样 ...
- 【大话GSM】WCDMA和LTE在提供数据和语音业务上的差异
WCDMA和LTE在提供数据和语音业务上的差异 以下两篇文章的内容来自网络,部分内容有重复,但在阐述"WCDMA和LTE在提供数据和语音业务上的差异"总结的都很好: 文章1:原题目 ...
- 获取枚举值上的Description特性说明
/// <summary> /// 获取枚举值上的Description特性说明 /// </summary> /// <typeparam name="T&q ...
- SAP QM 将业务上的偏差管理集成进入SAP系统?
SAP QM 将业务上的偏差管理集成进入SAP系统? SAP标准功能是不支持管理业务上经常有的偏差(Deviation)的管理的.在一般的SAP项目实施过程中,对于业务部门的偏差(以及变更)等多半不会 ...
- 低代码平台是“业务上云”走向万千企业的最后一公里
简介:阿里云智能钉钉事业部高级技术专家范之岳在分论坛分享了钉钉低代码的数字化实践经验.他认为,在全面上云的趋势下,低代码平台让"云"更平易近人,是"业务上云"走 ...
最新文章
- Linux-企业邮件部署
- 【Python】快速设置 pip 源
- 东北电力大学计算机网络复试题,2020年东北电力大学计算机学院复试(20200901201159).pdf...
- 线性汇编总结和函数说明
- 计算机系统基础:输入输出技术知识笔记
- php基础教程 第十一步 面向对象补充
- Delphi XE7实现的任意位置弹出菜单
- 网站微端服务器,微端服务器
- 一个手机只能连接一个热点吗_两个手机怎么连接热点
- 研究称在家中工作可提高员工工作效率
- python计算三角形斜边上的中线_直角三角形斜边上的中线的性质及其应用
- Markdown任务列表(实现列表勾选/非勾选操作)
- 10周拿下腾讯数据分析师认证
- jar包冲突的解决,依赖树的打印与分析
- 学习英语的方法(转载)
- oracle 取任意一条数据,oracle随机取一条数据详解
- GAN(生成对抗网络)和IQA(图像质量评价能擦出什么样的火花呢?)简单聊一些近来published的论文
- JavaScript实战手册(涵盖丰富的JQuery应用实例)
- 为了让你在“口袋奇兵,最新Java高级面试题汇
- device-mapper 块级重删(dm dedup) 3代码结构(2)