一条sql执行过长的时间,你如何优化,从哪些方面 1.查看sql是否涉及多表的联表或者子查询,如果有,看是否能进行业务拆分,相关字段冗余或者合并成临时表(业务和算法的优化)2.涉及链表的查询,是否能进行分表查询,单表查询之后的结果进行字段整合3.如果以上两种都不能操作,非要链表查询,那么考虑对相对应的查询条件做索引.加快查询速度4.针对数量大的表进行历史表分离(如交易流水表)5.数据库主从分离,读写分离,降低读写针对同一表同时的压力,至于主从同步,MySQL有自带的binlog实现 主从同步 个…
MySQL中的SQL是如何执行的 MySQL是典型的C/S架构,也就是Client/Server架构,服务器端程序使用的mysqld.整体的MySQL流程如下图所示: MySQL是有三层组成: 连接层: 负责客户端与服务器端建立连接,客户端发送SQL至服务端; SQL层: 对SQL语句进行查询处理; 存储引擎层: 与数据库文件打交道,负责数据的存储和读取. 其中,SQL层与数据库文件的存储方式无关,我们来看下SQL层的架构: 查询缓存: Server如果在查询缓存中发现了这条SQL语句,就会直接…
1.查看sql是否涉及多表的联表或者子查询,如果有,看是否能进行业务拆分,相关字段冗余或者合并成临时表(业务和算法的优化) 2.涉及链表的查询,是否能进行分表查询,单表查询之后的结果进行字段整合 3.如果以上两种都不能操作,非要链表查询,那么考虑对相对应的查询条件做索引.加快查询速度 4.针对数量大的表进行历史表分离(如交易流水表) 5.数据库主从分离,读写分离,降低读写针对同一表同时的压力,至于主从同步,mysql有自带的binlog实现 主从同步 6.explain分析sql语句,查看执行计…
1.查看sql是否涉及多表的联表或者子查询,如果有,看是否能进行业务拆分,相关字段冗余或者合并成临时表(业务和算法的优化) 2.涉及链表的查询,是否能进行分表查询,单表查询之后的结果进行字段整合 3.如果以上两种都不能操作,非要链表查询,那么考虑对相对应的查询条件做索引.加快查询速度 4.针对数量大的表进行历史表分离(如交易流水表) 5.数据库主从分离,读写分离,降低读写针对同一表同时的压力,至于主从同步,mysql有自带的binlog实现 主从同步 6.explain分析sql语句,查看执行计…
--使用waitfor语句延迟或暂停程序的执行 --waitfor{delay'time'|time 'time'} delay是指间隔时间 最长到24小时 time是指定时间执行 waitfor delay '00:00:10' --延迟10秒 A. 使用 WAITFOR TIME 以下示例在晚上 10:20 (22:20) 执行存储过程 sp_update_job. USE msdb; EXECUTE sp_add_job @job_name = 'TestJob'; BEGIN WAITF…
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优.但是一些"不好"的SQL也会导致数据库查询变慢,影响业务流程.本文从SQL角度进行数据库优化,提升SQL运行效率. 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长 应用的日志出现超时等错误 可以使用sar命令,top命令查看当前系统状态. 也可以通过Prometheus.Grafana等监控工具观察系统状态.(感兴趣的可以翻看我之…
判断问题SQL判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象CPU消耗严重IO等待严重页面响应时间过长应用的日志出现超时等错误可以使用sar命令,top命令查看当前系统状态. 也可以通过Prometheus.Grafana等监控工具观察系统状态.(感兴趣的可以翻看我之前的文章) SQL语句表象冗长执行时间过长从全表扫描获取数据执行计划中的rows.cost很大冗长的SQL都好理解,一段SQL太长阅读性肯定会差,而且出现问题的频率肯定会更高.更进一步判断SQL问题就得从执行计划入手…
在论坛上常见有朋友抱怨,说SQL Server太吃内存了.这里笔者根据经验简单介绍一下内存相关的调优知识   首先说明一下SQL Server内存占用由哪几部分组成.SQL Server占用的内存主要由三部分组成:数据缓存(Data Buffer).执行缓存(Procedure Cache).以及SQL Server引擎程序.SQL Server引擎程序所占用缓存一般相对变化不大,则我们进行内存调优的主要着眼点在数据缓存和执行缓存的控制上.本文主要介绍一下执行缓存的调优.数据缓存的调优将在另外的…
复杂SQL拆分优化 拆分SQL是性能优化一种非常有效的方法之一, 具体就是将复杂的SQL按照一定的逻辑逐步分解成简单的SQL,借助临时表,最后执行一个等价的逻辑,已达到高效执行的目的 一直想写一遍通过拆分SQL来优化的博文,最近刚好遇到一个实际案例,比较有代表性,现分享出来, 我们来通过一个案例来分析,为什么拆分语句可以提高SQL执行效率,更重要的是弄清楚,拆分前为什么慢,拆分后为什么快了? 幼稚的话,各位看官莫笑 先看一下相关表的数据量,大表也有5900多万,小表有160多万 (声明:我从来没…
想要进行sql优化,肯定得先找出来需要优化的sql语句 一.mysql有一个自带的sql执行慢记录日志文件,所记录的日志取决于参数long_query_time控制,默认情况下long_query_time的值为10秒 查看该参数的命令 :show variables like 'long_query_time%'; 二.如果需要进行记录操作,则必须开启慢查询日志记录(不做优化的情况下还是关闭,记录操作也会影响性能) 查看是否开启命令:show variables like '%slow_que…