回表查询就是使用索引后,还需要再次使用主键查找需要的数据列。
首先我们需要知道数据库中索引的底层数据结构是B+树,B+树的叶子结点储存了索引对应的值以及主键值,如果是复合索引(多列索引),B+树的叶子结点就储存了多列的值和主键值。
假设我们有一个名为user的MySQL表,它包含以下字段:
id:用户的唯一标识符(主键)
username:用户名 (添加了索引)
email:用户的电子邮件地址
age:用户的年龄
当我们执行SELECT email, age FROM user WHERE username = 'alice'的时候,数据库会使用username的索引查询到对应的数据行并获取到主键(叶子结点中的值),但是username的索引中并不包含email和age字段,因此数据库就需要再根据主键把这两个值查出来,影响性能。
为了避免回表查询,我们可以创建一个复合索引包括查询所需的所有数据列。
标签:username,age,查询,回表,索引,避免,email,主键 From: https://blog.csdn.net/weixin_71751028/article/details/137395066