面试问题(pdd二面)
(A B C) 联合索引,D没有索引
select * from table where A=? and C=?
和
select * from table where A=? and D=?
哪个可能更快一点
答案是第一条。因为索引下推(ICP), 第一条要回表的数据变少了
这个是MySQL 5.6新增的特性
索引下推是什么?(来自chatgpt的回答)
索引下推(Index Pushdown)是指在数据库查询过程中,将部分查询操作下推到存储引擎层执行,以减少数据传输和处理的工作量,提高查询效率。
传统的查询过程中,数据库管理系统(DBMS)接收到查询请求后,会先从磁盘读取数据到内存,然后对数据进行处理和过滤以满足查询条件。这意味着大量的数据需要从磁盘读取到内存,造成了磁盘IO和网络传输开销,可能导致查询性能下降。
索引下推通过在存储引擎层执行部分查询操作,可以减少数据传输和处理的工作量。具体而言,当查询条件涉及到索引列时,索引下推可以将过滤条件下推到存储引擎层执行,只将满足条件的数据返回给DBMS,而不是将所有数据都传输到DBMS进行过滤。这样可以减少磁盘IO和网络传输开销,提高查询效率。
索引下推的具体实现方式会因不同的数据库管理系统而有所不同,但基本思想是一致的:尽早在存储引擎层对数据进行过滤,减少不必要的数据传输和处理,提高查询性能。
相关视频讲解
【IT老齐252】MySQL关键特性索引下推ICP是做什么的?