[转帖]MySQL联合索引(复合索引)
Mysql联合唯一索引添加相同数据插入报错
联合索引在两个字段都存在唯一,将报错。
1.添加联合索引
alter table "表名" add unique index(`字段1`,`字段2`)
2.此时如果在插入相同的数据会报错,可以使用 no duplicate key update 解决相同数据不存储,不会报错
insert into "表名" (`name`,`age`,`time`)values('zhangsan','18','2001:10:10') on duplicate key
update `name`=values(`name`),`age`=values(`age`)
联合索引
本文中联合索引的定义为(MySQL):
ALTER TABLE `table_name` ADD INDEX (`col1`,`col2`,`col3`);
联合索引的优点
若多个一条SQL,需要多个用到两个条件
SELECT * FROM `user_info` WHERE username='XX',password='XXXXXX';
当索引在检索 password 字段的时候,数据量大大缩小,索引的命中率减小,增大了索引的效率。
符合索引的索引体积比单独索引的体积要小,而且只是一个索引树,相比单独列的索引要更加的节省时间复杂度和空间复杂度。
联合索引命中的本质(最左匹配的理解)
定义
当创建( col1,col2,col3
)联合索引时,相当于创建了( col
)单列索引,( clo1,clo2
)联合索引以及( col1,col2,col3
)联合索引想要索引生效,只能使用 col1
和 col1,col2
和 col1,col2,col3
三种组合;
当然,col1,col3
组合也可以,但实际上只用到了 col1
的索引,col3
并没有用到!
图解
通俗理解
联合索引相当于一个按照姓氏——名字
的一个电话簿,只能先确定姓氏才可以命中索引,下列可以正确命中联合索引的语句( =
和 IN
直接的字段都可以乱序,MySQL的查询优化器可以优化成索引识别的形式)
-- 只命中 col1,col2
SELECT * FROM `table_name` WHERE `col1`='XX';
-- 命中col1,col2。col1,col2的顺序可以颠倒
SELECT FROM table_name
WHERE clo1
='XX',clo2
='XXX';
SELECT FROM table_name
WHERE clo2
='XXX', clo1
='XX';
-- 命中col1,col2,col3,同理,三个列的顺可以颠倒
SELECT FROM table_name
WHERE col1
='X',col2
='XX',col3
='XXX';
SELECT FROM table_name
WHERE col1
='X',col3
='XX',col2
='XXX';
SELECT * FROM table_name
WHERE col2
='X',col3
='XX',col1
='XXX';
[转帖]MySQL联合索引(复合索引)的更多相关文章
- MySQL之索引复合索引有效性
首先这里建立一张数据表,并建立符合索引( index_A,index_B,index_C) CREATE TABLE `test_index_sequence` ( `Id` int(11) NOT ...
- 关于mysql建立索引 复合索引 索引类型
这两天有个非常强烈的感觉就是自己在一些特别的情况下还是hold不住,脑子easy放空或者说一下子不知道怎么去分析问题了,比方,问"hash和btree索引的差别",这非常难吗.仅仅 ...
- mongodb索引 复合索引
当我们的查询条件不只有一个时,就需要建立复合索引,比如插入一条{x:1,y:2,z:3}记录,按照我们之前建立的x为1的索引,可是使用x查询,现在想按照x与y的值查询,就需要创建如下的索引 创 ...
- MySQL 最左前缀(Leftmost Prefix) & 组合索引(复合索引,多列索引)
资料来源于网络,仅供参考学习. CREATE TABLE test(a INT,b INT,c INT,KEY idx(a,b,c)); 优: SELECT * FROM test WHERE a=1 ...
- MySQL复合索引探究
复合索引(又称为联合索引),是在多个列上创建的索引.创建复合索引最重要的是列顺序的选择,这关系到索引能否使用上,或者影响多少个谓词条件能使用上索引.复合索引的使用遵循最左匹配原则,只有索引左边的列匹配 ...
- Mysql高级操作学习笔记:索引结构、树的区别、索引优缺点、创建索引原则(我们对哪种数据创建索引)、索引分类、Sql性能分析、索引使用、索引失效、索引设计原则
Mysql高级操作 索引概述: 索引是高效获取数据的数据结构 索引结构: B+Tree() Hash(不支持范围查询,精准匹配效率极高) 树的区别: 二叉树:可能产生不平衡,顺序数据可能会出现链表结构 ...
- MySQL进阶之MySQL索引以及索引优化
本文配合B站学习视频BV1es411u7we使用效果更佳. 1. MySQL版本 主流版本:5.x版 5.0 - 5.1:早期产品的延续,升级维护 5.4 - 5.x:MySQL整合了三方公司的新存储 ...
- MySQL 联合索引详解
MySQL 联合索引详解 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c ...
- mysql 联合索引(转)
http://blog.csdn.net/lmh12506/article/details/8879916 mysql 联合索引详解 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中 ...
- mysql联合索引详解
联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索 引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支持a | a,b ...
随机推荐
- 深入剖析 Linux Cgroups 子系统:资源精细管理
本章主要演示以下 cgroups 下各个 subsystem 的作用. 根据难易程度,依次演示了 pids .cpu 和 memory 3 个 subsystem 的使用. 注:本文所有操作在 Ubu ...
- cookie和session的一些疑惑以及ai解答
我: 那么当浏览器关闭的时候,当再次访问这个地址的时候,为什么之前设置的cookie没有被删除掉?而且按照你说的这次可能会生成一个新的sessionID,那么cookie里面的其他数据,它是如何获取上 ...
- 神经网络基础篇:详解向量化逻辑回归(Vectorizing Logistic Regression)
向量化逻辑回归 讨论如何实现逻辑回归的向量化计算.这样就能处理整个数据集,甚至不会用一个明确的for循环就能实现对于整个数据集梯度下降算法的优化 首先回顾一下逻辑回归的前向传播步骤.所以,如果有 \( ...
- 第十三部分_awk
一.awk介绍 1. awk概述 awk是一种编程语言,主要用于在linux/unix下对文本和数据进行处理,是linux/unix下的一个工具.数据可以来自标准输入.一个或多个文件,或其它命令的输出 ...
- 源生创新 云享未来|GOTC全球开源技术峰会华为云云原生精彩时刻
摘要:GOTC 全球开源技术峰会在上海张江科学会堂成功举办. 本文分享自华为云社区<源生创新 云享未来|GOTC全球开源技术峰会华为云云原生精彩时刻>,作者:华为云云原生团队. GOTC ...
- 干货时间:聊聊DevOps下的技术系列之契约测试
摘要:本期和大家简单聊聊在服务交互场景下使用服务契约的重要性,以及契约管理的必要性,最后简单介绍了下契约测试. 1.服务交互带来的问题 在上一篇文章中,我们系统的列举了DevOps各个流程中常用的测试 ...
- 让 AI “潜入”物流中心,你的快递很快就到!
摘要:华为利用数字化.智能化的手段从传统物流运营转升成为专业智慧物流,在那些"看不见的地方"华为正在默默耕耘. 网购已经成为了新时代下的"日常",于是每年的「6 ...
- 顶会CIKM'21论文解读:基于图神经网络的人类行为轨迹恢复模型
摘要:本文是由华为云数据库创新Lab联合电子科技大学数据与智能实验室发表在顶会CIKM'21的文章,该文章提出首个克服人类移动轨迹数据中普遍存在的多层次周期性.周期偏移现象以及数据稀疏问题的轨迹恢复模 ...
- Scala学习系列(二)——环境安装配置
Scala下载地址:https://www.scala-lang.org/download/ 一.安装JDK 首先,因为Scala是运行在JVM平台上的,所以安装Scala之前要安装JDK 二.二进制 ...
- LAS Spark+云原生:数据分析全新解决方案
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 随着数据规模的迅速增长和数据处理需求的不断演进,云原生架构和湖仓分析成为了现代数据处理的重要趋势.在这个数字化时代 ...