mysql进阶-索引进阶

目录

1. 索引的相关语法

1.1 创建索引:

1.2 删除索引:

1.3 其他修改或创建方法:

2. 索引创建分类

2.1 索引类型

2.2 索引方法

2.3 索引分类

3. 索引原则

3.1 覆盖索引

3.2 最左前缀原则

3.3 索引下推(index condition pushdown)


1. 索引的相关语法

假如我们存在订单表,表结构如下:

CREATE TABLE `t_order` (
  `order_id` int(12) NOT NULL AUTO_INCREMENT COMMENT '订单主键',
  `money` decimal(10,2) DEFAULT NULL COMMENT '金额',
  `good_id` int(12) DEFAULT NULL COMMENT '商品ID',
  `good_name` varchar(20) DEFAULT NULL COMMENT '商品名称',
  PRIMARY KEY (`order_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4;

1.1 创建索引:

CREATE INDEX 索引名 ON <表名> (字段1,字段2,...);

示例:给商品id添加索引

create index index_good_id on t_order (good_id);

1.2 删除索引:

DROP INDEX 索引名 ON <表名>;

示例:删除商品id字段

drop index index_good_id on t_order;

1.3 其他修改或创建方法:

-- 创建表时创建索引
CREATE TABLE 表名
(
字段 数据类型,
….
{ INDEX | KEY } 索引名(字段1,字段2,...)
)
​
-- 修改表时修改索引
ALTER TABLE 表名 ADD { INDEX | KEY } 索引名 (字段1,字段2,...);
​
-- 删除主键索引
ALTER TABLE 表名 DROP PRIMARY KEY;

本人推荐使用最直接的创建索引和删除索引的语法,不建议和表的操作结合。

2. 索引创建分类

2.1 索引类型

索引类型分为:Normal 普通索引、Unique 唯一索引、Full Text 全文索引、SPATIAL 空间索引。

普通的开发一般只会用到普通索引和唯一索引。普通索引就是:可以重复。唯一索引就是不可以重复。这两个索引的含义也比较好理解。

我们使用上边的语法创建的索引默认是:普通索引。

2.2 索引方法

索引方法分为:BTREE、HASH两种方式。

BTREE索引的优点上篇文章已总结。

HASH索引的检索效率非常高,但是对于范围查询性能非常低。

我们使用上边的语法创建的索引默认是:BTREE。

2.3 索引分类

根据创建索引时的字段的多少可以分为单字段索引和组合索引。单字段索引就是创建索引时只包含一个字段,例如上边的示例。多字段索引就是创建索引时包含多个字段,如下:

create index index_good_id on t_order (good_id,good_name);

当然还有其他分类,例如聚簇索引和非聚簇索引。

3. 索引原则

3.1 覆盖索引

假如我们在t_order表中创建了good_id字段的索引,

create index index_good_id on t_order (good_id);

此时有如下查询语句:

select order_id from t_order where good_id

此语句查询时会用到用到good_id索引,并且order_id作为主键也在索引上,因此可以直接提供查询结果,不需要回表(回表的概念可以查看上篇文章:mysql进阶-索引基础-CSDN博客)。在这个查询里,索引index_good_id已经“覆盖”了我们的查询需求,我们称为覆盖左右。

常见的场景:当我们需要根据身份证查询姓名时,那么我们可以在居民表中建立身份证和姓名的联合索引。

3.2 最左前缀原则

该原则只使用于组合索引。组合索引的多个字段是有序的,遵循左对齐的原则。

假设在订单表中,我们查询商品名称首个字是香的商品的订单ID:

select order_id from t_order where good_name like '香%'

如果我们在表中有如下索引:

create index index_good_name on t_order (good_name);

那么我们也可以用到索引。

由上可知:不只是索引的全部定义,只要满足最左前缀,就可以利用索引来加速检索。这个最左前缀可以是联合索引的最左 N 个字段,也可以是字符串索引的最左 M 个字符。

3.3 索引下推(index condition pushdown)

索引下推是5.6版本之后引入的。

假如我们在表中有如下索引:

create index index_good_money on t_order (good_name,money);

如果我们有如下查询:

select * from t_order where good_name = '香蕉' and money > 10.0

此时数据库会使用索引下推,索引下推就是在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。

  • 18
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值