2026/3/29 19:31:20
网站建设
项目流程
深圳网站建设ue,wordpress 删除版权信息,郑州市 网站建设,电子商务企业一、回表查询如果索引列在select所需获得的列中或者根据一次索引查询就能获得记录就不需要回表#xff0c;如果select所需获得列中有大量的非索引列#xff0c;索引就需要到表中找到相应的列的信息#xff0c;这就是回表。二、InnoDB聚集索引聚集索引是一种特殊的索引类型如果select所需获得列中有大量的非索引列索引就需要到表中找到相应的列的信息这就是回表。二、InnoDB聚集索引聚集索引是一种特殊的索引类型它将数据行的物理存储顺序与索引键的逻辑顺序保存一致。在InnoDB中表数据本身就是按照聚集索引组织的这是与MyISAM等存储引擎的根本区别。数据行存储在索引的叶子节点中表数据在磁盘上按照聚集索引键值的顺序存储每个InnoDB表必须有且只有一个聚集索引。聚集索引的确定规则【按以下优先选择】主键显示定义的主键作为聚集索引第一个非空唯一索引如果没有主键内部生成的隐藏列如果以上都没有InnoDB自动生成6字节的ROW_ID作为聚集索引物理存储结构聚集索引B树结构┌─────────────────┐│ 根节点非叶子 │ ← 存储索引键和指针├─────────────────┤│ 中间节点非叶子 │ ← 存储索引键和指针├─────────────────┤│ 叶子节点存储数据 │ ← 存储完整的行数据└─────────────────┘三、二级索引非聚类索引的工作原理在InnoDB中所有非聚类索引都称为二级索引其叶子节点不包含完整数据行而是存储对应的主键值。-- 查询语句 SELECT * FROM users WHERE name Alice; -- 执行步骤 -- 1. 在idx_name索引树中查找Alice → 获得主键id值 -- 2. 使用该id值到聚集索引中查找完整数据行 ← 这就是回表查询四、覆盖索引只需要在一棵索引树上就能获取SQL所需的所有列数据无需回表速度更快。explain的输出结果Extra字段为Using index时能够触发索引覆盖。实现索引覆盖的方法常有将被查询的字段建立到联合索引里去。create table user ( id int primary key, name varchar(20), sex varchar(5), index(name) )engineinnodb;当我们使用如下代码时select id,name from user where nameshenjian;能够命中name索引索引叶子节点存储了主键id通过name的索引树即可获取id和name无需回表符合索引覆盖效率较高。