MySQL复合索引 in查询,mysql 联合索引 in查询是否生效
这篇文章主要讲的是使用in查询,联合索引是否会生效的问题
首先简单说一下联合索引:联合索引又叫复合索引,是由表中的几个列联合组成的索引。联合索引生效需满足最左前缀原则,即如果联合索引列为a,b,c三列,a,b,c 、a,b 、a生效,b,c、a,c、b、c等不生效(此处的顺序不是where条件后面的先后顺序,而是where条件中是否存在这些列,如果where中只存在a,c列,则不生效)。
CREATE TABLE `aaa` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`app_id` int(8) DEFAULT NULL,
`child_id` int(8) DEFAULT NULL,
`channel_id` int(8) DEFAULT NULL,
`app_channel_id` int(8) DEFAULT NULL,
`startup_count` int(10) DEFAULT '0' COMMENT '启动次数',
`date` date DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `appchannleid_date` (`app_id`,`child_id`,`channel_id`,`app_channel_id`,`date`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=355 DEFAULT CHARSET=utf8;
此时索引生效:
SELECT * FROM aaa a
WHERE 1=1 and a.app_id='10026' and a.child_id='13'(或WHERE 1=1 and a.child_id='13' and a.app_id='10026')
此时索引失效:
SELECT * FROM aaa a
WHERE 1=1 and a.child_id='13' and a.channel_id='3'
下面说一下使用in时联合索引的问题
还是使用上面那张表,in里面的数据是一个时,索引有效,大于一个时,索引失效,具体原因还没找到,有时间在研究。所以使用了强制索引使索引生效。
索引生效:
SELECT * FROM stat_app_channel_id_device_active_2018 a
WHERE 1=1 and a.app_id in ( '10026' ) order by date desc,id ASC limit 30
索引失效:
SELECT * FROM stat_app_channel_id_device_active_2018 a
WHERE 1=1 and a.app_id in ( '10026' , '10000' ) order by date desc,id ASC limit 30
索引生效:
SELECT * FROM stat_app_channel_id_device_active_2018 a force index(appchannleid_date)
WHERE 1=1 and a.app_id in ( '10026' , '10000' ) order by date desc,id ASC limit 30
什么时候索引生效:
1.表中含有索引。
2.查询时全表扫描比使用索引效率低时(大多数情况效率低,当数据量少或其他特殊情况下,全表扫描比使用索引效率高时,mysql不使用索引)。
3.满足索引生效的规则(例如表中是数值类型,传参是字符串类型)。
什么时候使用强制索引 force index:当我们确定要使用一个索引进行查询时,就可以使用强制索引。但使用强制索引后,mysql优化器不会在指定到其他的索引上,不管查询条件如何变,都会使用该索引进行查询。
MySQL复合索引 in查询,mysql 联合索引 in查询是否生效相关推荐
- mysql联合索引怎么存储_联合索引在B+树上的存储结构及数据查找方式
能坚持别人不能坚持的,才能拥有别人未曾拥有的. 关注编程大道公众号,让我们一同坚持心中所想,一起成长!! 引言 上一篇文章<MySQL索引那些事>主要讲了MySQL索引的底层原理,且对比了 ...
- mysql联合索引like_MySQL全文索引、联合索引、like查询、json查询速度大比拼
查询背景 有一个表tmp_test_course大概有10万条记录,然后有个json字段叫outline,存了一对多关系(保存了多个编码,例如jy1577683381775) 我们需要在这10万条数据 ...
- mysql教程联合索引_MySQL中的联合索引学习教程
联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支持a | a,b| ...
- mysql中联合索引abc 使用bac_mysql 联合索引
mysql 联合索引详解 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). ...
- 《MySQL学习》 索引 下 覆盖索引,MRR,联合索引
一. 覆盖索引 有一张表T1,它的建表语句如下 mysql> create table T1 ( ID int primary key, k int NOT NULL DEFAULT 0, s ...
- mysql索引(五)联合索引
Mysql索引大概有五种类型: 普通索引(INDEX):最基本的索引,没有任何限制 唯一索引(UNIQUE):与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值. 主 ...
- mysql联合索引不按顺序_mysql联合索引的使用以及sql执行的过程顺序
例如新增了一个联合索引 abc, 我写一条sql select * from table1 where a=1 and b=2 and c=2; 这样3个字段都是可以使用联合索引的.3者调换任意位置, ...
- mysql 索引未命中_联合索引命中率问题导致SQL查询效率慢的问题
执行 MySQL DumpSlow 结果是:Count: 1358 Time=0.33s (448s) Lock=0.00s (0s) Rows=2.5 (3343) Count:出现次数 Ti ...
- MySQL创建联合索引,字段的先后顺序,对查询的影响分析
文章目录 前言 最左匹配原则 为什么会有最左前缀呢? 联合索引的存储结构 联合索引字段的先后顺序 b+树可以存储的数据条数 总结 前言 对于联合索引我们知道,在使用的时候有一个最左前缀的原则,除了 ...
最新文章
- 为什么让A.I.“顶天立地”需要6个多月?
- 算法导论之计算几何学
- Condition_number
- SparkSQL愿景
- 读者吐槽:Go 面试总被问到 RPC
- pwd命令是什么的缩写_手机学编程(2)目录管理命令
- bootstrap table入门例子
- Qt5.7+Opencv2.4.9人脸识别(六)Tcp,Mysql,3DES,XML综合
- Qt:Qt实现飞秋拦截助手—介绍
- 10 -3 2用c语言怎么打,(3*20+30-10)/2怎么使用C语言编写
- Photoshop栅格化图层到底什么意思,什么时候该用栅格化涂层
- 图像scale与相机参数_摄像头参数测试指导分析解析
- python爬虫之图片的懒加载
- ehvierwer登录与不登录_自媒体账号管理神器,多个平台同时登录,给你不一样的感觉...
- JQ实现谷歌小恐龙小游戏
- 技术文档写作风格指南
- 中国航天科技集团公司的各个研究院
- 中科院计算机学院考研2021,2021中国科学院大学研究生分数线一览表(含2019-2020历年复试分数线)...
- 成都java培训一般需要多久
- 进入xshell显示路径