MYSQL查询优化
目前手头有个查询:
SELECT LPP.learning_project_pupilID, SL.serviceID, MAX(LPPO.start_date), SUM(LPPOT.license_mode_value) totalAssignedLicenses
FROM t_services_licenses SL
INNER JOIN t_pupils_offers_services POS ON POS.service_licenseID = SL.service_licenseID
INNER JOIN j_learning_projects_pupils_offers LPPO ON LPPO.learning_project_pupil_offerID = POS.learning_project_pupil_offerID
INNER JOIN j_learning_projects_pupils LPP ON LPPO.learning_project_pupilID = LPP.learning_project_pupilID
INNER JOIN j_learning_projects_pupils_offers_tracking LPPOT ON LPPOT.pupil_offer_serviceID = POS.pupil_offer_serviceID
INNER JOIN t_filters_items FI ON FI.itemID = LPP.learning_project_pupilID_for_filter_join
WHERE FI.filterID = '4dce2235-aafd-4ba2-b248-c137ad6ce8ca'
AND SL.serviceID IN ('OnlineConversationClasses', 'TwentyFourSeven')
GROUP BY LPP.learning_project_pupilID, SL.serviceID
查询非常慢,需要耗时半个多小时之多。
下面是表的一些详细信息:
t_filters_items表:


j_learning_projects_pupils_offers_tracking表:


j_learning_projects_pupils表:


j_learning_projects_pupils_offers表:


t_pupils_offers_services表:


t_services_licenses表:


执行计划如下:

sql脚本如下:
DROP TABLE IF EXISTS t_services_licenses;
CREATE TABLE t_services_licenses (
service_licenseID varchar(36) NOT NULL,
serviceID varchar(36) NOT NULL,
disciplineID varchar(36) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
serial_key varchar(50) DEFAULT NULL,
deleted tinyint(3) unsigned NOT NULL DEFAULT '',
PRIMARY KEY (service_licenseID),
KEY FK_t_services_licenses_serviceID (serviceID),
KEY IDX_disciplineID (disciplineID),
KEY IDX_deleted (deleted),
CONSTRAINT FK_t_services_licenses_serviceID FOREIGN KEY (serviceID) REFERENCES p_services (serviceID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS t_pupils_offers_services;
CREATE TABLE t_pupils_offers_services (
pupil_offer_serviceID varchar(36) NOT NULL,
learning_project_pupil_offerID varchar(36) NOT NULL,
service_licenseID varchar(36) NOT NULL,
triggered_pupil_offer_serviceID varchar(36) DEFAULT NULL,
triggered_right_of_use_typeID int(10) unsigned DEFAULT NULL,
triggered_right_of_use_value bigint(20) unsigned DEFAULT NULL,
PRIMARY KEY (pupil_offer_serviceID),
KEY FK_t_pupils_offers_services_offer_serviceID (service_licenseID),
KEY IDX_ID_SERVICE (learning_project_pupil_offerID,service_licenseID),
CONSTRAINT FK_t_pupils_offers_services_lppoID FOREIGN KEY (learning_project_pupil_offerID) REFERENCES j_learning_projects_pupils_offers (learning_project_pupil_offerID) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT FK_t_pupils_offers_services_slID FOREIGN KEY (service_licenseID) REFERENCES t_services_licenses (service_licenseID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS j_learning_projects_pupils_offers;
CREATE TABLE j_learning_projects_pupils_offers (
learning_project_pupil_offerID varchar(36) NOT NULL,
learning_project_pupilID bigint(20) unsigned NOT NULL,
offerID varchar(36) NOT NULL,
start_date datetime NOT NULL,
end_date datetime NOT NULL,
deleted tinyint(3) unsigned NOT NULL DEFAULT '',
interruption_count int(10) unsigned NOT NULL DEFAULT '',
PRIMARY KEY (learning_project_pupil_offerID),
KEY FK_j_learning_projects_pupils_offers_projID (learning_project_pupilID),
KEY FK_j_learning_projects_pupils_offers_offerID (offerID),
KEY IDX_start_date (start_date) USING BTREE,
KEY IDX_end_date (end_date) USING BTREE,
KEY IDX_deleted (deleted),
CONSTRAINT FK_LPPO_LP FOREIGN KEY (learning_project_pupilID) REFERENCES j_learning_projects_pupils (learning_project_pupilID) ON DELETE CASCADE,
CONSTRAINT FK_LPPO_O FOREIGN KEY (offerID) REFERENCES t_offers (offerID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS j_learning_projects_pupils;
CREATE TABLE j_learning_projects_pupils (
learning_project_pupilID bigint(20) unsigned NOT NULL AUTO_INCREMENT,
user_actorID varchar(36) NOT NULL,
active tinyint(3) unsigned DEFAULT '' COMMENT '',
disciplineID varchar(36) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
deleted tinyint(3) unsigned NOT NULL DEFAULT '',
active_work_reminder tinyint(3) unsigned NOT NULL DEFAULT '',
enable_change_of_reminder_settings tinyint(3) unsigned NOT NULL DEFAULT '',
enable_objective_redefinition tinyint(3) unsigned NOT NULL DEFAULT '',
enable_sequence_removing tinyint(3) unsigned NOT NULL DEFAULT '',
send_detailed_report tinyint(3) unsigned NOT NULL DEFAULT '',
send_learning_path tinyint(3) unsigned NOT NULL DEFAULT '',
send_test_result tinyint(3) unsigned NOT NULL DEFAULT '',
weekly_availability_time bigint(20) unsigned NOT NULL DEFAULT '',
working_reminder_periodicityID tinyint(3) unsigned NOT NULL,
working_reminder_periodicity_value bigint(20) unsigned NOT NULL DEFAULT '',
registration_date datetime NOT NULL,
current_free_mode_learning_levelID bigint(20) unsigned DEFAULT NULL,
enable_change_of_difficulty_settings tinyint(3) unsigned NOT NULL DEFAULT '',
was_activated tinyint(3) unsigned NOT NULL DEFAULT '',
was_connected tinyint(3) unsigned NOT NULL DEFAULT '',
snapshot_running tinyint(3) unsigned NOT NULL DEFAULT '',
visible tinyint(3) unsigned NOT NULL DEFAULT '',
tempID varchar(36) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
learning_project_pupilID_for_filter_join varchar(36) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
objectives_expected_time_on_formation smallint(5) unsigned NOT NULL DEFAULT '',
objectives_expected_time_enabled tinyint(3) unsigned NOT NULL DEFAULT '',
cecr_level tinyint(3) unsigned NOT NULL DEFAULT '',
enable_show_popup_phone_lesson_and_live_tutoring TINYINT(3) UNSIGNED NOT NULL DEFAULT '',
PRIMARY KEY (learning_project_pupilID),
KEY user_actorID (user_actorID),
KEY FK_j_learning_projects_pupils_level (current_free_mode_learning_levelID),
KEY IDX_statuses (was_activated,was_connected,deleted,active),
KEY IDX_LPP_TEMPID (tempID),
KEY IDX_LPP_TEMPFILTERID (learning_project_pupilID_for_filter_join),
KEY IDX_DAVA (deleted,active,visible,active_work_reminder),
KEY IDX_discipline_v (disciplineID,visible) USING BTREE,
CONSTRAINT FK_j_learning_projects_pupils_discipline FOREIGN KEY (disciplineID) REFERENCES p_disciplines (disciplineID),
CONSTRAINT FK_j_learning_projects_pupils_j_users_actors FOREIGN KEY (user_actorID) REFERENCES j_users_actors (user_actorID),
CONSTRAINT FK_j_learning_projects_pupils_level FOREIGN KEY (current_free_mode_learning_levelID) REFERENCES p_learning_levels (learning_levelID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS j_learning_projects_pupils_offers_tracking;
CREATE TABLE j_learning_projects_pupils_offers_tracking (
learning_project_pupil_offer_trackingID bigint(20) unsigned NOT NULL AUTO_INCREMENT,
pupil_offer_serviceID varchar(36) NOT NULL,
license_mode_typeID int(10) unsigned NOT NULL,
license_mode_value bigint(20) unsigned NOT NULL DEFAULT '',
effective_consumption_value bigint(20) unsigned NOT NULL DEFAULT '',
PRIMARY KEY (learning_project_pupil_offer_trackingID),
KEY FK_j_learning_projects_pupils_offers_tracking_posID (pupil_offer_serviceID),
CONSTRAINT FK_j_learning_projects_pupils_offers_tracking_posID FOREIGN KEY (pupil_offer_serviceID) REFERENCES t_pupils_offers_services (pupil_offer_serviceID) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS t_filters_items;
CREATE TABLE t_filters_items (
filterID varchar(36) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
itemID varchar(36) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
row_order bigint(20) unsigned NOT NULL DEFAULT '',
selected tinyint(3) unsigned NOT NULL DEFAULT '',
PRIMARY KEY (filterID,itemID),
CONSTRAINT FK_t_filters_items_ID FOREIGN KEY (filterID) REFERENCES t_filters (filterID) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
MYSQL查询优化的更多相关文章
- Atitit Mysql查询优化器 存取类型 范围存取类型 索引存取类型 AND or的分析
Atitit Mysql查询优化器 存取类型 范围存取类型 索引存取类型 AND or的分析 Atitit Mysql查询优化器 存取类型 范围存取类型 索引存取类型 AND or的分析1 存 ...
- MySQL查询优化之explain的深入解析
在分析查询性能时,考虑EXPLAIN关键字同样很管用.EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作.以及MySQL成功返回结果集需要执行的行数.expla ...
- 1025WHERE执行顺序以及MySQL查询优化器
转自http://blog.csdn.net/zhanyan_x/article/details/25294539 -- WHERE执行顺序-- 过滤比较多的放在前面,然后更加容易匹配,从左到右进行执 ...
- MySQL查询优化:查询慢原因和解决技巧
在开发的朋友特别是和mysql有接触的朋友会碰到有时mysql查询很慢,当然我指的是大数据量百万千万级了,不是几十条了,下面我们来看看解决查询慢的办法. MySQL查询优化:查询慢原因和解决方法 会经 ...
- mysql查询优化器为什么可能会选择错误的执行计划
有可能导致mysql优化器选择错误的执行计划的原因如下: A:统计信息不准确,mysql依赖存储引擎为其提供的统计信息来评估成本,然而有的存储引擎提供的信息是准确的,有的引擎提供的可能就偏差很大,如: ...
- Mysql查询优化器
Mysql查询优化器 本文的目的主要是通过告诉大家,查询优化器为我们做了那些工作,我们怎么做,才能使查询优化器对我们的sql进行优化,以及启示我们sql语句怎么写,才能更有效率.那么到底mysql到底 ...
- MySQL查询优化 (一)
以下的文章主要讲述的是MySQL查询优化的5个十分好用方法,熟悉SQL语句的人都清楚,如果要对一个任务进行操作的话,SQL语句可以有很多种相关写法,但是不同的写法查询的性能可能会有天壤之别. 本文列举 ...
- MySQL查询优化:连接查询排序limit
MySQL查询优化:连接查询排序limit(join.order by.limit语句) 2013-02-27 个评论 收藏 我要投稿 MySQL查询优化:连接查询排序 ...
- MySQL查询优化之explain
在分析查询性能时,考虑EXPLAIN关键字同样很管用.EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作.以及MySQL成功返回结果集需要执行的行数.expla ...
- Mysql查询优化器浅析
--Mysql查询优化器浅析 -----------------------------2014/06/11 1 定义 Mysql查询优化器的工作是为查询语句选择合适的执行路径.查询优化器的代码 ...
随机推荐
- DbUtils是Apache出品一款简化JDBC开发的工具类
DbUtils - DbUtils是Apache出品一款简化JDBC开发的工具类 - 使用DbUtils可以让我们JDBC的开发更加简单 - DbUtils的使用: ...
- TY创新D总个人经历谈
这是深圳一个公司的老板(就叫D总吧)在吃饭间和我们讲起的他的个人经历,这中间个人的苦辣酸甜,有些意思,值得玩味,就做了个实录. D总:我当时做餐饮是在我第一次创业失败之后.我做的是一家火锅店. 这家餐 ...
- EventBus使用详解(一)
一.概述 EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间 ...
- Tomcat源码分析之—容器整体结构
Tomcat有多个容器组成,而Container也就是容器与Connecter连接器是Tomcat最核心的两个模块,Connecter连接器接收客户端的请求,并根据客户端的请求传递给Container ...
- iOS极光推送,两次Bundleid不一致( 开发证书没有通过验证 是否重新上传证书)的解决方案
极光在配置ios端推送时,需要上传p12证书,如果遇到如下图:: 证书上传未通过的原因一般有: 1.当前上传的p12证书密码输入有误: 2. 证书导出的时候展开了证书,把个人私钥导了出来,导证书的时候 ...
- 如何在Chrome39添加360抢票王插件
前言: 版本:Chrome 39.0.2171.95 m CRX文件来源:ext.se.360.cn 本文地址:http://www.cnblogs.com/go2bed/p/4206714.html ...
- 入门级的按键驱动——按键驱动笔记之poll机制-异步通知-同步互斥阻塞-定时器防抖
文章对应视频的第12课,第5.6.7.8节. 在这之前还有查询方式的驱动编写,中断方式的驱动编写,这篇文章中暂时没有这些类容.但这篇文章是以这些为基础写的,前面的内容有空补上. 按键驱动——按下按键, ...
- POJ2743Mobile Computing[DFS 状态压缩]
Mobile Computing Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 666 Accepted: 224 ...
- Interceptor
拦截器是可以控制权限,当用户需要查看查看某些功能的时候,需要判断是不是登录了,如果没有登录的,就可拦截的过程.. 首先,我们都知道struts.xml 中有action 节点, 这个节点表示你想要访问 ...
- rownum和sum一起使用经验
因为sum的使用需要group by的,所以,对于sum出来的东西想要排序,使用rownum的话,不能直接放在SQL里面的. 可以这样. select rownum,R.* ( select sum( ...