mysql 8 EXPLAIN查询性能优化
2018-08-14 20:40
447 查看
1. 进入MySQL数据库中,查看:
MySQL的变量分为以下两种:
系统变量:配置MySQL服务器的运行环境,可以用show variables查看
SHOW VARIABLES;
状态变量:监控MySQL服务器的运行状态,可以用show status查看
SHOW STATUS;
show global status like '%log%';
2. 打开MySQL的配置文件,一般是/etc/my.conf
查找
slow_query_log_file =
后面的就是慢查询日志文件
打开慢查询日志文件查看,可以看到查询时间,行检查条数:
复制上面的慢查询语句,并在查询语句前加上EXPLAIN,
EXPLAIN SELECT
`u`.*,
`us`.`share_img_url`,
`up`.`promoter_id`,
( SELECT SUM( o.money ) FROM pm_orders o WHERE o.user_id = u.id GROUP BY o.user_id ) money_total,
( SELECT SUM( usc.promote_people_total ) FROM p_users_statistics usc WHERE usc.user_id = u.id GROUP BY usc.user_id ) people_total,
( SELECT nickname FROM p_users u WHERE up.promoter_id = u.id ) promoter_name,
(
SELECT
SUM( awr.award_num )
FROM
pm_award_records awr
WHERE
awr.award_type = 5
AND u.id = awr.praise_invitor_user_id
GROUP BY
awr.praise_invitor_user_id
) get_cash_num,
`ccc`.`thread_total`,
ad.nickname AS agent_name
FROM
`p_users` `u`
LEFT JOIN `p_users_shares` `us` ON `us`.`user_id` = `u`.`id`
LEFT JOIN `p_users_promoter` `up` ON `up`.`user_id` = `u`.`id`
LEFT JOIN (
SELECT
tmp.*,
count( * ) AS thread_total
FROM
(
SELECT
uuu.id,
pup.promoter_id
FROM
p_users AS uuu
INNER JOIN p_users_promoter AS pup ON uuu.id = pup.user_id
WHERE
uuu.mobile != ''
) AS tmp
LEFT JOIN p_users_promoter AS pup1 ON pup1.user_id = tmp.id
GROUP BY
pup1.promoter_id
) AS ccc ON `ccc`.`promoter_id` = `u`.`id`
LEFT JOIN `pm_admin` `ad` ON `ad`.`id` = `u`.`agent_person_id`
WHERE
( `u`.`is_star` IN ( 0, 1 ) )
GROUP BY
`u`.`id`
ORDER BY
thread_total DESC
LIMIT 0,
20;
这里可以看到查询类型,查询可能的键,检查行数,过滤行数等信息,可以通过分析针对哪些复杂查询SQL语句进行优化
MySQL的变量分为以下两种:
系统变量:配置MySQL服务器的运行环境,可以用show variables查看
SHOW VARIABLES;
状态变量:监控MySQL服务器的运行状态,可以用show status查看
SHOW STATUS;
show global status like '%log%';
2. 打开MySQL的配置文件,一般是/etc/my.conf
查找
slow_query_log_file =
后面的就是慢查询日志文件
打开慢查询日志文件查看,可以看到查询时间,行检查条数:
复制上面的慢查询语句,并在查询语句前加上EXPLAIN,
EXPLAIN SELECT
`u`.*,
`us`.`share_img_url`,
`up`.`promoter_id`,
( SELECT SUM( o.money ) FROM pm_orders o WHERE o.user_id = u.id GROUP BY o.user_id ) money_total,
( SELECT SUM( usc.promote_people_total ) FROM p_users_statistics usc WHERE usc.user_id = u.id GROUP BY usc.user_id ) people_total,
( SELECT nickname FROM p_users u WHERE up.promoter_id = u.id ) promoter_name,
(
SELECT
SUM( awr.award_num )
FROM
pm_award_records awr
WHERE
awr.award_type = 5
AND u.id = awr.praise_invitor_user_id
GROUP BY
awr.praise_invitor_user_id
) get_cash_num,
`ccc`.`thread_total`,
ad.nickname AS agent_name
FROM
`p_users` `u`
LEFT JOIN `p_users_shares` `us` ON `us`.`user_id` = `u`.`id`
LEFT JOIN `p_users_promoter` `up` ON `up`.`user_id` = `u`.`id`
LEFT JOIN (
SELECT
tmp.*,
count( * ) AS thread_total
FROM
(
SELECT
uuu.id,
pup.promoter_id
FROM
p_users AS uuu
INNER JOIN p_users_promoter AS pup ON uuu.id = pup.user_id
WHERE
uuu.mobile != ''
) AS tmp
LEFT JOIN p_users_promoter AS pup1 ON pup1.user_id = tmp.id
GROUP BY
pup1.promoter_id
) AS ccc ON `ccc`.`promoter_id` = `u`.`id`
LEFT JOIN `pm_admin` `ad` ON `ad`.`id` = `u`.`agent_person_id`
WHERE
( `u`.`is_star` IN ( 0, 1 ) )
GROUP BY
`u`.`id`
ORDER BY
thread_total DESC
LIMIT 0,
20;
这里可以看到查询类型,查询可能的键,检查行数,过滤行数等信息,可以通过分析针对哪些复杂查询SQL语句进行优化
相关文章推荐
- mysql性能优化-慢查询分析、优化索引和配置 (慢查询日志,explain,profile)
- Mysql查询性能优化-善用Explain语句
- 【MySql性能优化二】利用explain进行查询和分析sql语句
- mysql:21个性能优化最佳实践之2[EXPLAIN 你的 SELECT 查询]
- Mysql查询性能优化-善用Explain语句
- mysql查缺补漏(二)mysql5.6性能优化(explain执行计划术语,索引,优化查询)
- mysql性能优化-慢查询分析、优化索引和配置 MySQL索引介绍
- MySQL性能优化小记:MySQL子查询很慢的问题
- MySql学习(七) —— 查询性能优化 深入理解MySql如何执行查询
- MySql学习(七) —— 查询性能优化 深入理解MySql如何执行查询
- 性能优化之MySQL优化(一)- 慢查询
- mysql性能优化-慢查询分析、优化索引和配置
- MySQL 性能优化神器 Explain 使用分析
- 【高性能MySQL】读书摘录5-第6章、查询性能优化
- MySQL优化案例---半连接(semi join)优化方式 导致的查询性能低下
- mysql性能优化-慢查询分析、优化索引和配置
- MySQL查询优化-explain
- MySQL查询语句的性能优化
- MySql学习(七) —— 查询性能优化 深入理解MySql如何执行查询