mysql5.6 临时表_MySQL5.6 运用临时表做SQL优化
有一个系统从Oracle迁移到MySQL,在Oracle中运行很快,在MySQL基本运行不出来(等了10分钟都无法运行出来),该加的索引都加了,最后用临时表解决问题。
SELECT COUNT(1)
FROM (SELECT a.vendor_id
FROM g_VENDOR a LEFT JOIN g_VENDOR_CONTACT_PERSON b ON a.vendor_id = b.vendor_id) a
LEFT JOIN (SELECT c.vendor_id,
d.vendor_classify_id,
d.vendor_classify_code,
d.vendor_classify_name
FROM g_vendor_classify_link c, ipb_vendor_classify d
WHERE c.vendor_classify_id = d.vendor_classify_id) e ON a.vendor_id =e.vendor_id
LEFT JOIN (SELECT g.object_id,
f.file_name,
f.file_type,
f.state,
f.update_time,
f.file_dir,
h.attachment_type
FROM g_attachment_object_relation g,
g_attachment f
LEFT JOIN g_attachment_extend h
ON f.attachment_id = h.attachment_id
WHERE f.attachment_id = g.attachment_id
AND f.state = 2
AND g.state = 1
AND f.job_type_code = 'g_Vendor_Attachment_File') h ON a.vendor_id = h.object_id;
+----+-------------+------------+--------+--------------------------------+--------------------------------+---------+--------------------- +------+----------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+--------+--------------------------------+--------------------------------+---------+--------------------- +------+----------------------------------------------------+
| 1 | PRIMARY | | ALL | NULL | NULL | NULL | NULL | 5009 | NULL |
| 1 | PRIMARY | | ref | | | 99 | a.vendor_id | 10 | NULL |
| 1 | PRIMARY | | ALL | NULL | NULL | NULL | NULL | 2970 | Using where; Using join buffer (Block Nested Loop) |
| 4 | DERIVED | f | ALL | PRIMARY | NULL | NULL | NULL | 2970 | Using where |
| 4 | DERIVED | g | ref | idx2_g_attachment_object_rel | idx2_g_attachment_object_rel | 98 | f.attachment_id | 1 | Using where |
| 4 | DERIVED | h | ref | ind_tae_attachment_id | ind_tae_attachment_id | 99 | f.attachment_id | 1 | NULL |
| 3 | DERIVED | c | index | NULL | index_vendor_classify | 198 | NULL | 457 | Using where; Using index |
| 3 | DERIVED | d | eq_ref | PRIMARY | PRIMARY | 98 | c.vendor_classify_id | 1 | NULL |
| 2 | DERIVED | a | index | NULL | ind_sv_VENDOR_SOURCE | 5 | NULL | 131 | Using index |
| 2 | DERIVED | b | ref | ind_svcp_vendor_id | ind_svcp_vendor_id | 99 | a.vendor_id | 1 | Using index |
+----+-------------+------------+--------+--------------------------------+--------------------------------+---------+------------------------------------+------+--------------------------------------+
改成如下方式,一共花费6s出来结果: CREATE TEMPORARY TABLE tmp_g_VENDOR(vendor_id VARCHAR(32)); CREATE INDEX ind_tsv_vendor_id ON tmp_g_VENDOR(vendor_id); INSERT INTO tmp_g_VENDOR SELECT a.vendor_id FROM (SELECT a.vendor_id FROM g_VENDOR a LEFT JOIN g_VENDOR_CONTACT_PERSON b ON a.vendor_id = b.vendor_id) a LEFT JOIN (SELECT c.vendor_id, d.vendor_classify_id, d.vendor_classify_code, d.vendor_classify_name FROM g_vendor_classify_link c, ipb_vendor_classify d WHERE c.vendor_classify_id = d.vendor_classify_id) e ON a.vendor_id = e.vendor_id; CREATE TEMPORARY TABLE tmp_attachment_object(object_id VARCHAR(100)); CREATE INDEX ind_tao_object_id ON tmp_attachment_object(object_id); INSERT INTO tmp_attachment_object SELECT g.object_id FROM g_attachment_object_relation g, g_attachment f LEFT JOIN g_attachment_extend h ON f.attachment_id = h.attachment_id WHERE f.attachment_id = g.attachment_id AND f.state = 2 AND g.state = 1 AND f.job_type_code = 'g_Vendor_Attachment_File'; SELECT COUNT(1) FROM tmp_g_VENDOR a LEFT JOIN tmp_attachment_object b ON a.vendor_id = b.object_id;
mysql5.6 临时表_MySQL5.6 运用临时表做SQL优化相关推荐
- 系统优化怎么做-SQL优化
前言 数据库很重要!很重要!很重要! 重要的事情说三遍.所以单独用一篇来讲述SQL怎么优化.不过这里说到一点,不建议在业务代码里写很多复杂业务SQL,基本尽可能的减少 join,子查询 等,也就说尽量 ...
- oracle查询数据放入临时表,ORACLE Temporary Tables临时表更适合做插入和查询操作
1简介 ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables.这些临时表用来保存一个会话SESSION的数据,或者保存在一个事务中需要的数据.当会话退出或者用户提交 ...
- oracle临时表空间组,证明临时表空间组在并发session时的作用
本帖最后由 zcs0237 于 2013-7-16 20:26 编辑 a.感谢对本帖补充.建议.错误更正 b.为节省篇幅,部分输出结果做了精简 c.可按本文先后顺序复制文中代码进程调试 d.测试环境: ...
- oracle如何查询临时表空间,Oracle查询临时表空间的占用
可以使用以下语句查询是哪个session number的哪个sql占用了较大的临时表空间 select inst_id,username,session_num,sql_id,tablespace,s ...
- oracle数据存入临时表,oracle中创建临时表步骤
当前位置:我的异常网» 数据库 » oracle中创建临时表步骤 oracle中创建临时表步骤 www.myexceptions.net 网友分享于:2014-06-08 浏览:4次 oracle ...
- oracle临时表动态采样,带临时表的SQL查询语句的优化方法
[IT168 原创]故障突发:11号上午,收到系统应用人员的反馈:"销售日报"无法查询出结果,已经等待一个小时,屏幕依然是灰的,而以往该报表2分钟内即可出结果,IT部的同事看一下怎 ...
- oracle缩减临时表空间,oracle的临时表空间写满磁盘空间解决改问题的步骤
oracle的临时表空间写满磁盘空间,解决改问题的具体步骤,以下的操作是用数据库的sys超级用户操作 刚开始打算把临时表空间的数据文件重新缩小就好了 执行: SQL> alter databas ...
- oracle临时表读,Oracle之临时表详细解读
临时表,顾名思义,就是临时存储数据的表. 具体讲,用来保存一个会话session的数据, 或者保存在一个事务中需要的数据. 当会话退出或者用户提交commit和回滚rollback事务的时候, 临时 ...
- mysql 临时表 主键_MySQL临时表
MySQL 临时表 MySQL 临时表在我们需要保存一些临时数据时是非常有用的.临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间. 临时表在MySQL 3.23版本中添加,如 ...
最新文章
- 开源资产管理系统java_开源资产管理软件 GLPI 9.3.1 部署
- np.asarray和np.array、np.nanmean和np.mean、np.diff、
- 【BZOJ】2675: Bomb
- legend2---开发常用语句
- linux nginx搭配https
- java scala 混合打包_scala和java混合开发打包
- 字节3-1前端面试官自学Vue的正确姿势
- 【ESSD技术解读-04】ESSD Auto PL规格,引领IO性能弹性新方向
- Qt 翻译文件的加载
- HBase数据模型深入剖析-OLAP商业环境实战
- ShardingSphere(七) 读写分离配置,实现分库读写操作
- Apache 不记录指定文件类型的日志——LAMP环境搭建
- CRC校验算法详解及代码实现
- 【MATLAB基础】数据作图--imagesc
- 进阶项目(4)蜂鸣器程序设计讲解
- Nginx配置https及证书
- python testng_单元测试工具 TestNG 使用
- 智能手环APP软件开发
- 漫反射与Lambert模型
- 什么是手机证书和签名干什么用的