这篇文章主要讲的是使用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查询是否生效相关推荐

  1. mysql联合索引怎么存储_联合索引在B+树上的存储结构及数据查找方式

    能坚持别人不能坚持的,才能拥有别人未曾拥有的. 关注编程大道公众号,让我们一同坚持心中所想,一起成长!! 引言 上一篇文章<MySQL索引那些事>主要讲了MySQL索引的底层原理,且对比了 ...

  2. mysql联合索引like_MySQL全文索引、联合索引、like查询、json查询速度大比拼

    查询背景 有一个表tmp_test_course大概有10万条记录,然后有个json字段叫outline,存了一对多关系(保存了多个编码,例如jy1577683381775) 我们需要在这10万条数据 ...

  3. mysql教程联合索引_MySQL中的联合索引学习教程

    联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支持a | a,b| ...

  4. mysql中联合索引abc 使用bac_mysql 联合索引

    mysql 联合索引详解 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). ...

  5. 《MySQL学习》 索引 下 覆盖索引,MRR,联合索引

    一. 覆盖索引 有一张表T1,它的建表语句如下 mysql> create table T1 ( ID int primary key, k int NOT NULL DEFAULT 0, s ...

  6. mysql索引(五)联合索引

    Mysql索引大概有五种类型: 普通索引(INDEX):最基本的索引,没有任何限制 唯一索引(UNIQUE):与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值. 主 ...

  7. mysql联合索引不按顺序_mysql联合索引的使用以及sql执行的过程顺序

    例如新增了一个联合索引 abc, 我写一条sql select * from table1 where a=1 and b=2 and c=2; 这样3个字段都是可以使用联合索引的.3者调换任意位置, ...

  8. mysql 索引未命中_联合索引命中率问题导致SQL查询效率慢的问题

    执行 MySQL DumpSlow 结果是:Count: 1358  Time=0.33s (448s)  Lock=0.00s (0s)  Rows=2.5 (3343) Count:出现次数 Ti ...

  9. MySQL创建联合索引,字段的先后顺序,对查询的影响分析

    文章目录 前言 最左匹配原则 为什么会有最左前缀呢? 联合索引的存储结构 联合索引字段的先后顺序 b+树可以存储的数据条数 总结 前言 ​ 对于联合索引我们知道,在使用的时候有一个最左前缀的原则,除了 ...

最新文章

  1. 为什么让A.I.“顶天立地”需要6个多月?
  2. 算法导论之计算几何学
  3. Condition_number
  4. SparkSQL愿景
  5. 读者吐槽:Go 面试总被问到 RPC
  6. pwd命令是什么的缩写_手机学编程(2)目录管理命令
  7. bootstrap table入门例子
  8. Qt5.7+Opencv2.4.9人脸识别(六)Tcp,Mysql,3DES,XML综合
  9. Qt:Qt实现飞秋拦截助手—介绍
  10. 10 -3 2用c语言怎么打,(3*20+30-10)/2怎么使用C语言编写
  11. Photoshop栅格化图层到底什么意思,什么时候该用栅格化涂层
  12. 图像scale与相机参数_摄像头参数测试指导分析解析
  13. python爬虫之图片的懒加载
  14. ehvierwer登录与不登录_自媒体账号管理神器,多个平台同时登录,给你不一样的感觉...
  15. JQ实现谷歌小恐龙小游戏
  16. 技术文档写作风格指南
  17. 中国航天科技集团公司的各个研究院
  18. 中科院计算机学院考研2021,2021中国科学院大学研究生分数线一览表(含2019-2020历年复试分数线)...
  19. 成都java培训一般需要多久
  20. 进入xshell显示路径

热门文章

  1. java 跳格子_【题解】跳房子-C++
  2. 举例说明IKAanlyzer分词
  3. 华为手机这几个默认设置,一定要关闭,再也不卡顿
  4. html-loldemo
  5. 为什么有的女生讨厌生孩子?
  6. Android X86和手机arm上的android开发是不同的。
  7. css盒模型以及如何计算盒子的宽度
  8. [ACAM,状压]P2292
  9. 计算机键盘和鼠标的操作,计算机应用基础 键盘和鼠标
  10. @Transactional的超详细介绍