Mysql数据库中什么是索引下推 - 面试宝典

举报
皮牙子抓饭 发表于 2023/07/28 09:16:19 2023/07/28
【摘要】 ​Mysql数据库中的"索引下推"是指在使用索引进行查询时,将部分过滤条件下推至存储引擎层进行过滤,减少回表的次数和数据传输量,从而提高查询性能。 示例代码如下: 假设我们有一个商品表​​products​​,其中包含id、name和price三个字段,其中id是主键,并且有一个非聚簇索引idx_name(name)。 首先,创建商品表:sqlCopy codeCREATE TABLE `p...

Mysql数据库中的"索引下推"是指在使用索引进行查询时,将部分过滤条件下推至存储引擎层进行过滤,减少回表的次数和数据传输量,从而提高查询性能。 示例代码如下: 假设我们有一个商品表​​products​​,其中包含id、name和price三个字段,其中id是主键,并且有一个非聚簇索引idx_name(name)。 首先,创建商品表:

sqlCopy codeCREATE TABLE `products` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `price` decimal(10,2) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`)
) ENGINE=InnoDB;

然后,向商品表中插入一些数据:

sqlCopy codeINSERT INTO `products` (`name`, `price`) VALUES
('Apple', 5.00),
('Banana', 2.50),
('Orange', 3.00),
('Grape', 4.50),
('Watermelon', 10.00);

接下来,我们进行一个查询,需要获取价格大于等于5.00的商品的名称:

sqlCopy codeSELECT `name` FROM `products` WHERE `price` >= 5.00;

在这个查询中,如果我们只创建了索引idx_name(name),那么Mysql会通过该索引快速定位到满足条件的行,但是还需要回到主表中获取对应行的name字段的值,这个过程就是回表。 为了减少回表的次数和数据传输量,我们可以使用索引下推。在Mysql 5.6及以上版本,可以通过设置optimizer_switch参数来启用索引下推:

sqlCopy codeSET optimizer_switch='index_condition_pushdown=on';

这样,在查询价格大于等于5.00的商品的名称时,Mysql会将条件​​price >= 5.00​​下推至存储引擎层进行过滤,只将满足条件的行返回给Mysql,从而避免了不符合条件的数据的回表操作。 使用索引下推可以减少回表的次数和数据传输量,提高查询性能。但是需要注意的是,索引下推对于某些特定的查询条件可能没有效果,或者在某些情况下可能会降低查询性能。因此,在使用索引下推时需要仔细评估和测试。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。