1 个回答
非聚簇索引查询非索引列数据
当通过非聚簇索引查询数据时,如果查询的列不在非聚簇索引中,就需要回表。
例如在InnoDB存储引擎中,有一个用户表,在用户姓名列上有非聚簇索引,查询语句是SELECT user_id, user_age, user_name FROM users WHERE user_name = 'John';,
如果只在姓名列上有非聚簇索引,查询user_id和user_age列时就需要通过姓名列的非聚簇索引找到主键值,再通过主键值在聚簇索引(数据行存储位置)中获取user_id和user_age列的数据,这就是回表操作。
组合索引部分使用不符合最左前缀原则后的查询假设有一个组合索引(column1,column2,column3),查询语句是SELECT * FROM table_name WHERE column2 = value2 AND column3 = value3;,
由于没有从组合索引的最左边列(column1)开始查询,数据库可能会先通过索引找到部分匹配的行,然后再回表去检查这些行是否满足column2 = value2 AND column3 = value3的条件。
发布于:4个月前 (01-07) IP属地:四川省
我来回答
您需要 登录 后回答此问题!