[转帖]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 ...
随机推荐
- CSS3学习笔记-过渡
学习CSS3过渡(Transitions)是为了在元素状态之间创建平滑的动画效果.下面是一些关于CSS3过渡的学习笔记: 过渡基础语法: 使用transition属性来定义过渡效果. 通过指定过渡的属 ...
- 基于 Docker 打造前端持续集成开发环境
基于 Docker 打造前端持续集成开发环境 写在前面: 这不是一篇有新意的文章,因为这篇文章半年前我就发布在其他平台上过,为什么在知乎上旧文新发? 除了想要把发布在其他地方的文章统一放到知乎上之外, ...
- Java 创建/编辑/删除Excel迷你图表
迷你图是Excel工作表单元格中表示数据的微型图表.使用迷你图可以非常直观的显示数据变化趋势,突出最大值.最小值,放在数据表格中可起到很好的数据分析效果.本文将通过Java代码示例介绍如何在Excel ...
- 一文讲述数仓组件SysCache
摘要:SysCache是ThreadLocal结构,每个线程都具有各自的SysCache,其中存储的缓存信息由执行的业务决定. 本文分享自华为云社区<GaussDB(DWS)CBB组件之SysC ...
- iOS代码混淆-从入门到放弃
iOS代码混淆-从入门到放弃 目录 1. 什么是iOS代码混淆? 2. iOS自动代码混淆的方法是什么? 3. iOS代码混淆的作用是什么? 4. 怎么样才能做到更好的iOS代码混淆? 总结 参考 ...
- 开启一个 A/B 实验到底有多简单?
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 火山引擎 A/B 测试平台 DataTester 孵化于字节跳动业务内部,在字节跳动,"万事皆 A/B, ...
- IIS 设置超时时间
高级设置 => 限制 => 连接超时(秒),默认120秒,根据实际情况调整
- 性能提升-如何设置Windows操作系统TIME_WAIT状态的TCP连接快速回收时间?
大规模Windows环境下,采用Nginx反向代理服务后,操作系统会产生较多TIME_WAIT的TCP(Transmission Control Protocol)连接,操作系统默认TIME_WAIT ...
- Axure 快速回到原点
如果点了[快速回到原点]不生效,可能是因为输入法导致.
- Sublime Text Python 代码提示插件 Anaconda
1.Ctrl+Shift+P -> install package 安装 Anaconda 查看Python 安装路径 { "python_interpreter":&quo ...