52条SQL语句性能优化策略,建议收藏
泥瓦匠BYSocket
共 8937字,需浏览 18分钟
· 2021-03-17
不点蓝字,我们哪来故事?
技术分享
来源:cnblogs.com/SimpleWu/p/9929043.html
查询的结果用于“插、删、改”的不能加 nolock; 查询的表属于频繁发生页分裂的,慎用 nolock ; 使用临时表一样可以保存“数据前影”,起到类似 Oracle 的 undo 表空间的功能,能采用临时表提高并发性能的,不要用 nolock。
select a.personMemberID, * from chineseresume a,personmember b where personMemberID = b.referenceid and a.personMemberID = 'JCNPRH39681' (A = B, B = '号码')
select a.personMemberID, * from chineseresume a,personmember b where a.personMemberID = b.referenceid and a.personMemberID = 'JCNPRH39681' and b.referenceid = 'JCNPRH39681' (A = B, B = '号码', A = '号码')
select a.personMemberID, * from chineseresume a,personmember b where b.referenceid = 'JCNPRH39681' and a.personMemberID = 'JCNPRH39681' (B = '号码', A = '号码')
索引的创建要与应用结合考虑,建议大的 OLTP 表不要超过 6 个索引; 尽可能的使用索引字段作为查询条件,尤其是聚簇索引,必要时可以通过 index index_name 来强制指定索引; 避免对大表查询时进行 table scan,必要时考虑新建索引; 在使用索引字段作为条件时,如果该索引是联合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用; 要注意索引的维护,周期性重建索引,重新编译存储过程。
SELECT * FROM record WHERE substrINg(card_no, 1, 4) = '5378' --13秒
SELECT * FROM record WHERE amount/30 < 1000 --11秒
SELECT * FROM record WHERE convert(char(10), date, 112) = '19991201' --10秒
SELECT * FROM record WHERE card_no like '5378%' -- < 1秒
SELECT * FROM record WHERE amount < 1000*30 -- < 1秒
SELECT * FROM record WHERE date = '1999/12/01' -- < 1秒
SELECT JOB, AVG(SAL)
FROM EMP
GROUP BY JOB
HAVING JOB = 'PRESIDENT'
OR JOB = 'MANAGER'
SELECT JOB, AVG(SAL)
FROM EMP
WHERE JOB = 'PRESIDENT'
OR JOB = 'MANAGER'
GROUP BY JOB
触发一个触发器,执行一个触发器事件本身就是一个耗费资源的过程; 如果能够使用约束实现的,尽量不要使用触发器; 不要为不同的触发事件(Insert、Update 和 Delete)使用相同的触发器; 不要在触发器中使用事务型代码。
表的主键、外键必须有索引; 数据量超过 300 的表应该有索引; 经常与其他表进行连接的表,在连接字段上应该建立索引; 经常出现在 WHERE 子句中的字段,特别是大表的字段,应该建立索引; 索引应该建在选择性高的字段上; 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引; 复合索引的建立需要进行仔细分析,尽量考虑用单字段索引代替; 正确选择复合索引中的主列字段,一般是选择性较好的字段; 复合索引的几个字段是否经常同时以 AND 方式出现在 WHERE 子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引; 如果复合索引中包含的字段经常单独出现在 WHERE 子句中,则分解为多个单字段索引; 如果复合索引所包含的字段超过 3 个,那么仔细考虑其必要性,考虑减少复合的字段; 如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引; 频繁进行数据操作的表,不要建立太多的索引; 删除无用的索引,避免对执行计划造成负面影响; 表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。另外,过多的复合索引,在有单字段索引的情况下,一般都是没有存在价值的;相反,还会降低数据增加删除时的性能,特别是对频繁更新的表来说,负面影响更大。 尽量不要对数据库中某个含有大量重复的值的字段建立索引。
从二级复制服务器上进行备份; 在进行备份期间停止复制,以避免在数据依赖和外键约束上出现不一致; 彻底停止 MySQL,从数据库文件进行备份; 如果使用 MySQL dump 进行备份,请同时备份二进制日志文件 – 确保复制没有中断; 不要信任 LVM 快照,这很可能产生数据不一致,将来会给你带来麻烦; 为了更容易进行单表恢复,以表为单位导出数据——如果数据是与其他表隔离的。 当使用 mysqldump 时请使用 –opt; 在备份之前检查和优化表; 为了更快的进行导入,在导入时临时禁用外键约束。; 为了更快的进行导入,在导入时临时禁用唯一性检测; 在每一次备份后计算数据库,表以及索引的尺寸,以便更够监控数据尺寸的增长; 通过自动调度脚本监控复制实例的错误和延迟; 定期执行备份。
myisam:应用时以读和插入操作为主,只有少量的更新和删除,并且对事务的完整性,并发性要求不是很高的。 InnoDB:事务处理,以及并发条件下要求数据的一致性。除了插入和查询外,包括很多的更新和删除。(InnoDB 有效地降低删除和更新导致的锁定)。 对于支持事务的 InnoDB类 型的表来说,影响速度的主要原因是 AUTOCOMMIT 默认设置是打开的,而且程序没有显式调用 BEGIN 开始事务,导致每插入一条都自动提交,严重影响了速度。可以在执行 SQL 前调用 begin,多条 SQL 形成一个事物(即使 autocommit 打开也可以),将大大提高性能。
往期推荐
下方二维码关注我
技术草根,坚持分享 编程,算法,架构
评论
面试官:MySQL 上亿大表,如何深度优化?
来源:cnblogs.com/YangJiaXin/p/10828244.html背景分析测试实施索引优化后delete大表优化为小批量删除总结前段时间刚入职一家公司,就遇上这事!背景XX实例(一主一从)xxx告警中每天凌晨在报SLA报警,该报警的意思是存在一定的主从延迟(若在此时发生主从切换,需要
好好学java
0
Excel 黑科技:轻松优化工作薄性能
随着时间的推移,大型工作表可能会收集不必要的格式和元数据,从而降低性能。当数据被删除但基础格式未被删除时,可能会发生这种情况。Excel 现在可以自动检测性能问题并提出解决方法。您还可以随时手动运行检查性能命令来识别和解决性能问题。当我们打开工作簿时,Excel 会自动检查具有不必要格式的单元格。如
PowerBI战友联盟
6
6 个火爆 GitHub 的后台管理模板,快来收藏!
将Python客栈设为“星标⭐”第一时间收到最新资讯今天来给大家介绍6个火爆 G 站的管理后台模板,有了它们,对于前端不是很熟悉的小伙伴来说,再也不用烦恼了,而且有一说一,即使是前端大牛,要想从零开发一套完整的管理模板,也不是一件容易的事情。1. vue-element-admin该项目是基于 Vu
Python客栈
0
-92%!性能暴降
据媒体报道,英特尔在其Gaudi 3 AI芯片白皮书中披露,正准备向中国市场推出“特供版”Gaudi 3。特供Gaudi 3包括:HL-328的OAM兼容夹层卡(Mezzanine Card)HL-388的PCle加速卡其中HL-328将于6月24日推出,HL-388将于9月24日推出。&
放毒
12
为什么现在Java连Date类都不建议使用了?
来源:juejin.cn/post/7343161506699313162有什么问题吗java.util.Date?java.util.Date(Date从现在开始)是一个糟糕的类型,这解释了为什么它的大部分内容在 Java 1.1 中被弃用(但不幸的是仍在使用)。设计缺陷包括:它的名称具有误导性:
Java专栏
10
实现订单30分钟自动取消的策略
原文:juejin.cn/post/7285167401821798400简介在电商和其他涉及到在线支付的应用中,通常需要实现一个功能:如果用户在生成订单后的一定时间内未完成支付,系统将自动取消该订单。本文将详细介绍基于Spring Boot框架实现订单30分钟内未支付自动取消的几种方案,并提供实例
JAVA乐园
0
图解 SQL 执行顺序,通俗易懂!
来源:blog.csdn.net/weixin_44141495/article/details/108744720/数据的关联过程from&join&wheregroup byhaving&whereselectorder bylimit这是一条标准的查询语句:图片这是我们
Java专栏
4824
性能爆表:SpringBoot利用ThreadPoolTaskExecutor批量插入百万级数据实测!
关注我们,设为星标,每天7:40不见不散,架构路上与您共享回复架构师获取资源大家好,我是你们的朋友架构君,一个会写代码吟诗的架构师。来源:azdebug.blog.csdn.net/article/details/103697108前言具体实现细节测试结果总结前言开发目的: 提高百万级数据
Java架构师社区
0