索引单表优化案例|学习笔记

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 快速学习索引单表优化案例

开发者学堂课程【MySQL 高级应用 - 索引和锁索引单表优化案例】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/598/detail/8613


索引单表优化案例


目录:

一.释义

二.索引失效【应该避免】

三.一般性建议


一.释义

①索引分析

②索引失效【应该避免】

③一般性建议

索引分析分为

1.单表

2.两表

3.三表

——建表sql/案例

CREATE TABLE IF NOT EXISTs article

`id INT (10) UNSIGNED NO Т NULL PRIMARY KEY AU Т o _ INCREMENT ,` author _ idINT (10) UNSIGNED NO Т NULL ,

' category _ id INT (10) UNSIGNED NO Т NULL ,` views ` INT (10) UNSIGNED NOT NULL ,

'comments ` INT (10) UNSIGNED NOT NULL ,` title ` VARBINARY (255) NOT NULL ,

' content ` TEXT NO Т NULLH

INSERT INTO ` article `(` author _ id ',` category _ id `,` views ,` comments `,` title `,` content `) VALUES(1,1,1,1,1,1),

(2,2,2,2,"2,2),(1,1,3,3,3,3;

>` comments ` INT (10) UNSIGNED No Т NULL ,>` title ` VARBINARY (255)хот NULL ,

->` content `ТЕХТот NULL >);

uery ok ,0 rows affected ( o .05 sec )

mysq1>

mysq1> INSER Т IN Т o ` article `(` author _ id `,` category _ id `,` views `,` comments `,` title `,` content `) VALUES

->(1,1,1,1,'1','1'),>(2,2,2,2,2,12),>(,1,3,3,3,3);

uery OK ,3 rows affected ( o .00 sec ) ecords :3 Duplicates :0 Warnings :0l

mysq1>

mysq1> SELEC Т“ FRO artic1e;

id I author _ id I category _ id I views I comments I title content

Query OK ,0rows affected (0.07 sec ) Records :0 Duplicates :0 Narni ngs :

mysql > show index from articlet

Table INon _ unf que Key _ na В e I Seq _ in _ index I Col unn _ name I Collation I Cardinality I Sub _ part I Packed INul1 I Index _ type I Com В ent I Index comment I

aricle PRIMARY d NULLI NUL BTREE

article idx _ article _ ccv category _ id NtLL NULL BTREE

article idx _ article _ ccv coents NLLL NUL  BTREE

article idx _ article _ ccv vies NtLL NULL BTREE

4 ros In set sCc

mysq1> EXPLAIx SELECT id . author _ id FRO article WHERE category _ id =1AND co ВВ ents >1 ORDER BY viess DESC LINIT 1:

I id I select _ type I table Iposstblekeys key key _ len lref Гo0s Extra

1ISIMPLE I article I range I idx _ article _ ccv I iLarticle _ ccv 8 NULLI 1I Using where : tsing filesort I

I ro In set ( O .00 sec )

mysql > EXPLAIx SELEC Т d , author _ Id FRO article WHERE category _ d =1AND co В ments = IoRDER BY viess DESC LINI Т1;

id Iselect type ItableItype Ipossible keyskey keylen L ref Г oW

1 ISIMPLE I article I ref Iidx _ article _ ccv I idx _ article _ ccv I 8 Iconst , const

#1.22EXPLAIN

EXPLAIN SELECT id , author _ id FROM ` article ` WHERE category _ id =1AND comments >1ORDER BY views DESC LIMIT 1; EXPLAIN SELECT id , author _ id FROM ` article ` WHERE category _ id =1AND comments =3 ORDER BY views DESc LIMIT 1

#结论:

# type 变成了 range ,这是可以忍受的。但是 extra 里使用 Using filesort 仍是无法接受的。

#但是我们已经建立了索引,为啥没用呢?

#这是因为按照 BTree 素引的工作原理,#先排序 category _ id ,

#如果遇到相同的 category id 则再排序 comments ,如果遇到相同的 comments 则再排序 views

# comments 字段在联合素引里处于中间位置时,

# comments >1条件是一个范围值(所谓 range ),

# MySQL 无法利用索引再对后面的 views 部分进行检素, range 类型查询字段后面的索引无效。

# comments 字段在联合索引里处于中间位置时,# comments >1条件是一个范围值(所谓 range ),

HMySQL 无法利用索引再对后面的 views 部分进行检索, range 类型查询字段后面的索引无效。

#1.3删除第一次建立的索引

DROP INDEX idx _ article _ ccv ON article ;

1.42次新建索引

# ALTER TABLE ` article ` ADD INDEX idx _ article _ cv (` category _ id , views `); create index idx _ article _ cv on article ( category _ id , views );

#1.53EXPLAIN

EXPLAIN SELEC Т id , author _ id FROM article WHERE category _ id =1AND comments >1ORDER BY views DESc LIMIT 1;

#结论:

可以看到, ype 变为了 ref , Extra 中的 Using filesort 也消失了,结果非常理想。

DROP INDEX idx _ article _ cv ON article ;

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
存储 中间件 数据库连接
|
3月前
|
存储 关系型数据库 MySQL
MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计
覆盖索引、前缀索引、索引下推、SQL优化、EXISTS 和 IN 的区分、建议COUNT(*)或COUNT(1)、建议SELECT(字段)而不是SELECT(*)、LIMIT 1 对优化的影响、多使用COMMIT、主键设计、自增主键的缺点、淘宝订单号的主键设计、MySQL 8.0改造UUID为有序
|
7月前
|
缓存 关系型数据库 MySQL
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
1198 0
|
5月前
分库分表中间表优化
【7月更文挑战第21天】
43 2
|
SQL 存储 分布式数据库
分库分表索引设计:二级索引、全局索引的最佳设计实践
对主键来说,要保证在所有分片中都唯一,它本质上就是一个全局唯一的索引。如果用大部分同学喜欢的自增作为主键,就会发现存在很大的问题。
|
SQL 存储 分布式数据库
分库分表索引设计:分布式环境下的 主键索引、二级索引、全局索引的最佳设计实践
分库分表索引设计:分布式环境下的 主键索引、二级索引、全局索引的最佳设计实践
128 0
|
存储 SQL 关系型数据库
|
关系型数据库 MySQL 开发者
索引两表优化案例|学习笔记
快速学习索引两表优化案例
113 0
索引两表优化案例|学习笔记
|
缓存 关系型数据库 MySQL
索引三表优化案例|学习笔记
快速学习索引三表优化案例
索引三表优化案例|学习笔记
|
存储 SQL 关系型数据库
索引到底能提升多少查询效率?何时该使用索引?一文快速搞懂数据库索引及合理使用它
索引到底能提升多少查询效率?何时该使用索引?一文快速搞懂数据库索引及合理使用它
680 0
索引到底能提升多少查询效率?何时该使用索引?一文快速搞懂数据库索引及合理使用它