好的网站建设启示,南宁网站建设多少钱,字节跳动公司简介,wordpress怎么排版两大类索引使用的存储引擎#xff1a;MySQL5.7 InnoDB聚簇索引* 如果表设置了主键#xff0c;则主键就是聚簇索引* 如果表没有主键#xff0c;则会默认第一个NOT NULL#xff0c;且唯一(UNIQUE)的列作为聚簇索引* 以上都没有#xff0c;则会默认创建一个隐藏的row_id作为聚…两大类索引使用的存储引擎MySQL5.7 InnoDB聚簇索引* 如果表设置了主键则主键就是聚簇索引* 如果表没有主键则会默认第一个NOT NULL且唯一(UNIQUE)的列作为聚簇索引* 以上都没有则会默认创建一个隐藏的row_id作为聚簇索引由此可见使用聚簇索引查询会很快因为可以直接定位到行记录。普通索引InnoDB的普通索引叶子节点存储的是主键(聚簇索引)的值而MyISAM的普通索引存储的是记录指针。示例建表mysql create table user(- id int(10) auto_increment,- name varchar(30),- age tinyint(4),- primary key (id),- index idx_age (age)- )engineinnodb charsetutf8mb4;id 字段是聚簇索引age 字段是普通索引(二级索引)填充数据insert into user(name,age) values(张三,30);insert into user(name,age) values(李四,20);insert into user(name,age) values(王五,40);insert into user(name,age) values(刘八,10);mysql select * from user;------------------| id | name | age |------------------| 1 | 张三 | 30 || 2 | 李四 | 20 || 3 | 王五 | 40 || 4 | 刘八 | 10 |------------------索引存储结构id 是主键所以是聚簇索引其叶子节点存储的是对应行记录的数据聚簇索引(ClusteredIndex)age 是普通索引(二级索引)非聚簇索引其叶子节点存储的是聚簇索引的的值普通索引(secondaryIndex)如select * from user where id 1;聚簇索引查找过程如果查询条件为普通索引(非聚簇索引)需要扫描两次B树第一次扫描通过普通索引定位到聚簇索引的值然后第二次扫描通过聚簇索引的值定位到要查找的行记录数据。1. 先通过普通索引 age30 定位到主键值 id12. 再通过聚集索引 id1 定位到行记录数据普通索引查找过程第一步普通索引查找过程第二步回表查询先通过普通索引的值定位聚簇索引值再通过聚簇索引的值定位行记录数据需要扫描两次索引B树它的性能较扫一遍索引树更低。索引覆盖例如select id,age from user where age 10;如何实现覆盖索引1、如实现select id,age from user where age 10;explain分析因为age是普通索引使用到了age索引通过一次扫描B树即可查询到相应的结果这样就实现了覆盖索引explain分析age是普通索引但name列不在索引树上所以通过age索引在查询到id和age的值后需要进行回表再查询name的值。此时的Extra列的NULL表示进行了回表查询为了实现索引覆盖需要建组合索引idx_age_name(age,name)drop index idx_age on user;create index idx_age_name on user(age,name);explain分析此时字段age和name是组合索引idx_age_name查询的字段id、age、name的值刚刚都在索引树上只需扫描一次组合索引B树即可这就是实现了索引覆盖此时的Extra字段为Using index表示使用了索引覆盖。哪些场景适合使用索引覆盖来优化SQL全表count查询优化mysql create table user(- id int(10) auto_increment,- name varchar(30),- age tinyint(4),- primary key (id),- )engineinnodb charsetutf8mb4;例如select count(age) from user;使用索引覆盖优化创建age字段索引create index idx_age on user(age);列查询回表优化前文在描述索引覆盖使用的例子就是例如select id,age,name from user where age 10;使用索引覆盖建组合索引idx_age_name(age,name)即可分页查询因为name字段不是索引所以在分页查询需要进行回表查询此时Extra为Using filesort文件排序查询性能低下。使用索引覆盖建组合索引idx_age_name(age,name)