• 2020-12-26:mysql中,表person有字段id、name、age、sex,id是主键,name是普通索引,age和sex没有索引。select * from person where id=1 and name='james' and age=1 and sex=0。请问这条语句有几次回表?


    2020-12-26:mysql中,表person有字段id、name、age、sex,id是主键,name是普通索引,age和sex没有索引。select * from person where id=1 and name='james' and age=1 and sex=0。请问这条语句有几次回表?

    福哥答案2020-12-26:

    答案是没有回表。

    一般题目是判断有没有回表,而这道题是要说出有几次回表。

    刚开始以为会用到回表。后来想了想,没有回表。id是等值查询,顶多命中1条数据。然后再对这1条数据做name过滤,就这么1条数据,没必要回表查询,连我都能想到,mysql的作者更能想到,mysql没那么傻。

    有什么不对的地方,请直接留言评论。

    1.创建表和插入数据:
    -- ----------------------------
    -- Table structure for `person` 表结构
    -- ----------------------------
    DROP TABLE IF EXISTS `person`;
    CREATE TABLE `person` (
    `id` int(11) NOT NULL,
    `name` varchar(255) NOT NULL,
    `age` int(11) NOT NULL,
    `sex` tinyint(4) NOT NULL,
    PRIMARY KEY (`id`),
    KEY `name` (`name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    -- ----------------------------
    -- Records of person,表中记录
    -- ----------------------------
    INSERT INTO `person` VALUES ('1', 'james', '11', '1');
    INSERT INTO `person` VALUES ('2', 'haha', '12', '0');
    INSERT INTO `person` VALUES ('3', '福大大', '13', '2');

    2.查看执行计划:
    EXPLAIN SELECT * FROM person WHERE id=3;
    EXPLAIN SELECT * FROM person WHERE id=3 AND name='福大大';
    EXPLAIN SELECT * FROM person WHERE id=3 AND name='福大大' AND age=13;
    EXPLAIN SELECT * FROM person WHERE id=3 AND name='福大大' AND age=13 AND sex=2;


    ***
    [评论](https://user.qzone.qq.com/3182319461/blog/1608939505)

  • 相关阅读:
    python中的 ' ' 和 " "
    Socket编程, 在server端read()函数调用后显示错误:Transport endpoint is not connected (犯了低级错误)
    我也终于申请了自己的博客。
    山之高
    策略模式-Java实现
    SQL事务的四种隔离级别和MySQL多版本并发控制
    用JAMES实现自己的邮件服务器
    windows mysql 自动备份的几种方法
    Hibernate常见配置详细解释
    慕课网-Linux达人养成计划学习笔记
  • 原文地址:https://www.cnblogs.com/waitmoon/p/14194604.html
Copyright © 2020-2023  润新知