MySQL:通过增加索引进行SQL查询优化(2)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: MySQL:通过增加索引进行SQL查询优化

优化测试

1、直接查询

select * from student 
where id in (
select student_id from student_score  where 
course_id=1 and score=100
);

不知道为什么 2.7s 就执行完了… 原文中说 执行时间:30248.271s

马上看了下版本号,难道是版本的问题:

我的 : Server version: 5.7.21
原文:mysql 5.6

用 explain 看执行计划 type=all

explain extended
select * from student 
where id in (
select student_id from student_score  where
course_id=1 and score=100
);
# 执行完上一句之后紧接着执行
mysql> show warnings;
SELECT
    `demo`.`student`.`id` AS `id`,
    `demo`.`student`.`name` AS `name` 
FROM
    `demo`.`student` semi
    JOIN ( `demo`.`student_score` ) 
WHERE
    (
        ( `<subquery2>`.`student_id` = `demo`.`student`.`id` ) 
        AND ( `demo`.`student_score`.`score` = 100 ) 
    AND ( `demo`.`student_score`.`course_id` = 1 ) 
    )


2、增加索引

单条大概执行15s


alter table student_score add index INDEX_COURSE_ID(course_id);
alter table student_score add index INDEX_SCORE(score);


加完索引之后执行 0.027s ,速度快了 100倍(2.7 / 0.027)


3、使用 inner join

用了 0.26


select s.id, s.name from student as s inner JOIN student_score as ss 
on s.id=ss.student_id 
where ss.course_id=1 and ss.score=100




4、再次优化

执行也是 0.26, 并没有像原文所说的那样 0.001s…难道他的机器比我好?


select s.id, s.name from 
(select * from student_score where course_id=1 and score=100 ) as t 
inner join student as s 
on s.id=t.student_id



虽然和原文很多不一致的地方,不过也算是一次加索引优化数据库查询的实际操作了


参考文章

一次非常有意思的SQL优化经历:从30248.271s到0.001s

文章知识点与官方知识档案匹配,可进一步学习相关知识

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9天前
|
关系型数据库 MySQL 索引
mysql 分析5语句的优化--索引添加删除
mysql 分析5语句的优化--索引添加删除
11 0
|
15天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:优化进销存管理,掌握MySQL索引,提升系统效率(11)
轻松入门MySQL:优化进销存管理,掌握MySQL索引,提升系统效率(11)
|
9天前
|
SQL 缓存 关系型数据库
mysql性能优化-慢查询分析、优化索引和配置
mysql性能优化-慢查询分析、优化索引和配置
75 0
|
15天前
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
|
15天前
|
缓存 关系型数据库 MySQL
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
|
9天前
|
SQL 数据库 索引
SQL索引失效原因分析与解决方案
SQL索引失效原因分析与解决方案
18 0
|
10天前
|
SQL 存储 关系型数据库
【MySQL实战笔记】02.一条SQL更新语句是如何执行的-2
【4月更文挑战第5天】两阶段提交是为确保`redo log`和`binlog`逻辑一致,避免数据不一致。若先写`redo log`, crash后数据可能丢失,导致恢复后状态错误;若先写`binlog`,crash则可能导致重复事务,影响数据库一致性。一天一备相较于一周一备,能缩短“最长恢复时间”,但需权衡额外的存储成本。
15 1
|
10天前
|
关系型数据库 MySQL 数据库
mysql卸载、下载、安装(window版本)
mysql卸载、下载、安装(window版本)
|
1月前
|
关系型数据库 MySQL 数据库连接
关于MySQL-ODBC的zip包安装方法
关于MySQL-ODBC的zip包安装方法
|
29天前
|
关系型数据库 MySQL 数据库
rds安装数据库客户端工具
安装阿里云RDS的数据库客户端涉及在本地安装对应类型(如MySQL、PostgreSQL)的客户端工具。对于MySQL,可选择MySQL Command-Line Client或图形化工具如Navicat,安装后输入RDS实例的连接参数进行连接。对于PostgreSQL,可以使用`psql`命令行工具或图形化客户端如PgAdmin。首先从阿里云控制台获取连接信息,然后按照官方文档安装客户端,最后配置客户端连接以确保遵循安全指引。
81 1