Mysql的优化一则

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

目的在于这么一个sql语句:

1
SELECT w.* FROM wallpaper w inner join wallpaper_category_relation r ON w.wallpaper_id = r.wallpaper_id  WHERE (r.category_level1_id=39 AND w.is_online = 1)  ORDER BY w.online_time DESC  LIMIT 0,10;

这个sql语句是两个表连查,w表和r表进行连查,w表中查询使用到的字段有is_online, online_time, wallpaper_id, r表使用的字段有wallpaper_id, category_level1_id

两个表都是InnoDB

其中w表的情况如下:

主键为wallpaper_id,没有其他索引。

r表情况如下:

wallpaper_id不是主键,但是wallpaper_id+category_level1_id组成了索引。

使用优化

这个查询是个慢查询。使用explain查看:

Image

可以看到其中以r表为主表,并且使用到了临时表,这样效率就低下了。。。

用show profiles看这个语句查询时间:

Image(1)

第一个想到的是w表没有建立任何索引,所以应该建立一个is_online和online_time的索引。

alter table wallpaper add index `isonline_onlinetime` (`is_online`, `online_time`)

Image(2)

现在的时间:

Image(3)

这里的区别就是原先由于w表没有用得上的索引,sql查询优化判断使用r表做主表。后来w加上索引后,sql查询自动优化,判断以w表做主表更好,就先使用上了w表的索引。

可以使用STRAIGHT_JOIN

当然如果你想要强制让查询以w表做主表,可以使用STRAIGHT_JOIN来替换inner join。STRAIGHT_JOIN就是强制使用join前面的表作为主表,查询的。

SELECT w.* FROM wallpaper w STRAIGHT_JOIN wallpaper_category_relation r ON w.wallpaper_id = r.wallpaper_id WHERE (r.category_level1_id=39 AND w.is_online = 1) ORDER BY w.online_time DESC LIMIT 0,10

官方文档:http://dev.mysql.com/doc/refman/5.0/en/join.html

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
9月前
|
SQL 关系型数据库 MySQL
【MySQL】MySQL的优化(二)
【MySQL】MySQL的优化(二)
74 0
|
7月前
|
缓存 关系型数据库 MySQL
mysql 50条 优化建议
mysql 50条 优化建议
60 0
|
9月前
|
SQL JSON 关系型数据库
【MySQL】MySQL的优化(四)
【MySQL】MySQL的优化(四)
56 0
|
9月前
|
关系型数据库 MySQL 数据库
【MySQL】MySQL的优化(五)
【MySQL】MySQL的优化(五)
66 0
|
9月前
|
SQL 关系型数据库 MySQL
【MySQL】MySQL的优化(三)
【MySQL】MySQL的优化(三)
56 0
|
9月前
|
SQL 关系型数据库 MySQL
【MySQL】MySQL的优化(一)
【MySQL】MySQL的优化(一)
66 0
|
10月前
|
SQL 存储 缓存
MySQL-配置优化
MySQL-配置优化
283 0
|
11月前
|
SQL 存储 关系型数据库
常用的MySQL 优化方法
常用的MySQL 优化方法
87 0
|
SQL 存储 缓存
MySQL应用优化
MySQL应用优化
|
缓存 关系型数据库 MySQL