- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MySQL数据库SQL语句最佳实践案例
文档编号 版 本 号 V.0 日 期 2014--29
中国移动通信集团南方基地IT支撑中心
声 明
本文档所有权和解释权归中国移动南方基地所有,未经书面许可,不得复制或向第三方公开。
This document is the property of GMCC and can be neither reproduced nor disclosed to a third party without a written authorization.
修订历史记录
日期 AMD 修订者 说明 1 20014/7/29 A 李季鹏 新建
(A-添加,M-修改,D-删除)
MySQL数据库中SQL问题进行分类整理和总结。
批量插入数据
问题案例
INSERT INTO SMAP_HISTORY.SMAP2_SESSION (SESSION_ID,SESSION_TICKET_ID) VALUES(1001,1001);
INSERT INTO SMAP_HISTORY.SMAP2_SESSION (SESSION_ID,SESSION_TICKET_ID) VALUES(1001,1002);
INSERT INTO SMAP_HISTORY.SMAP2_SESSION (SESSION_ID,SESSION_TICKET_ID) VALUES(1001,1003);
问题分析
当批量插入数据时,MySQL首选多行插入语句对比SQL的binlog和innodb事务日志O量也是后者数倍这些影响使得两者在大批量插入时效率上有较大差异
记录数 单条数据插入 多条数据插入 1百 0.149s 0.011s 1千 1.231s 0.047s 1万 11.678s 0.218s
优化建议
INSERT INTO SMAP_HISTORY.SMAP2_SESSION (SESSION_ID,SESSION_TICKET_ID) VALUES(1001,1001),(1001,1002),(1001,1003)…;
避免出现select *
问题案例
SELECT * FROM SMAP2_INTERFACE_INVOKE_LOG S;
问题分析
使用select 取出全部列会让优化器无法完成索引覆盖扫描这类优化更会带来额外的
优化建议
建议评估业务实际避免使用insert…select…语句
问题案例
INSERT INTO SMAP_HISTORY.SMAP2_SESSION
(SESSION_ID,
SESSION_TICKET_ID,
SESSION_TICKET_ISSUER,
SESSION_UID,
SESSION_SRC_APP_ID,
SESSION_DEST_APP_ID,
SESSION_SID,
SESSION_SID_ISSUE_TIME,
SESSION_SID_STATUS,
SESSION_ISSUER,
SESSION_SID_UPDATE_TIME)
SELECT S.SESSION_ID,
S.SESSION_TICKET_ID,
S.SESSION_TICKET_ISSUER,
S.SESSION_UID,
S.SESSION_SRC_APP_ID,
S.SESSION_DEST_APP_ID,
S.SESSION_SID,
S.SESSION_SID_ISSUE_TIME,
#status#,
S.SESSION_ISSUER,
#updateTime#
FROM SMAP.SMAP2_SESSION S
WHERE SESSION_SID = #sessionId#
由于表SMAP.SMAP2_SESSION本身承载着大量的插入操作,该语句造成的表锁严重阻塞了其他对该表进行的insert语句,造成故障。
问题分析
当使用 insert...select...进行记录的插入时,如果 select 的表是 innodb 类型的,不论 insert 的表是什么类型的表,都会对 select 的表的纪录进行锁定。对于那些从 oracle 迁移过来的应用,需要特别的注意,因为 oracle 并不存在类似的问题,所以在 oracle 的应用中 insert...select...操作非常的
文档评论(0)