懂的越多,不懂的越多
不谈场景的技术,都是瞎扯
上周收到凯子的内推,去一家公司面试,经过一番斗智斗勇之后,在谈到mysql的索引时,笑里藏刀的面试管放出了杀手锏,小伙子你知道ICP是什么吗?
这里就不得不介绍下,我的英语水平,烂到极点,所以我只能假装被问到知识盲区了,“这个我没有详细的了解过,您能说下你要问ICP的哪方面吗?” 心里一阵难受,TCP我指定,UDP我指定,ICU我也知道,但是ICP是个什么南北?
面试管也许被我的天真感化了,你说下索引下推把。。。
what?索引下推——ICP,回来了回来了,它回来了,它又回来了。
索引下推是mysql5.6开始实装的一个查询优化技术,它减少了存储引擎查询基础表的次数,减少MySQL服务器与存储引擎交互次数
有一张info表
表 | info |
---|---|
主键 | id |
名称 | name |
值 | value |
别名 | realname |
对于info表,我们现在有(name,value)联合索引
下面展示一些 内联代码片
。
select * from info where name='张' and value='2'
未使用ICP
mysql服务发送读服务到搜索引擎,搜索引擎在内存中查询满足name索引的数据,返回满足条件的数据给mysql服务,mysql服务进行一次回表查询,然后再进行value索引的查询
使用ICP
mysql服务发送读服务到搜索引擎,搜索引擎在内存中查询满足name索引的数据,再查询满足value索引的数据,返回满足条件的数据给mysql服务,mysql服务进行一次回表查询。
在这个过程中,未使用ICP,需要回表的数据是满足name索引的数据,而使用ICP,需要回表的数据同时满足name索引和value索引的数据。谁快谁慢不言而喻。
据说:搜索引擎通常是内存中,速度快。
当然,还是我们的老话,不谈场景的技术,都是瞎扯 。
对于info表而言,什么情况下,开启和不开启索引下推,效率没有明显差别呢?