将绝大部分的SQL查询改为存储过程,这样的操作毫无疑问可以提高部分性能。
凡是使用“select * from xxx”的操作一律具体到所需字段。
使用join连接2个以上大量数据的表,且基础数据表变化不大的查询一律使用视图,并为此视图建立索引。理由来自SQL Server联机帮助手册: “对于标准视图而言,为每个引用视图的查询动态生成结果集的开销很大,特别是对于那些涉及对大量行进行复杂处理(如聚合大量数据或联接许多行)的视图。如果在查询中频繁地引用这类视图,可通过对视图创建唯一聚集索引来提高性能。对视图创建唯一聚集索引后,结果集将存储在数据库中,就像带有聚集索引的表一样。
对视图创建索引的另一个好处是:优化器可以在未直接在 FROM 子句中指定某一视图的查询中使用该视图的索引。这样一来,可从索引视图检索数据而无需重新编码,由此带来的高效率也使现有查询获益。”
凡是使用 "select count(*) from xxx" 或是"select count(id) from xxx”(此处id为主键)的查询,一律改为”select count(1) from xxx”,理论上采用*来做聚合值,SQL Server会自动寻觅最合适的字段以进行聚合,但这样仍然会占用系统开销,即使主键也没有1来得快。
对于多条件的组合查询,我们一般会写成”where ((@condition is null) or (condition=@condition))”形式的存储过程条件来进行查询,但这样的操作会因为”is null ”导致性能问题,反复实地检测后采用了”where 1 = 1 ”,然后根据条件“IF @condition IS NOT NULL SET @sqlText=@sqlText+' AND Condition=''' + @Condition +'''',最后 “exec sp_executesql @sqlText” 的方式,这样确实可带来明显的性能提升,分析应是”is null ”或”is not null”导致了索引失效,进行了全表扫描。
对使用row_number()函数的表建立合适的索引,必须要有最合适的索引才能避免重建索引时的全表row_number()运算带来的性能问题,而且索引的方向也很重要,比如时间类的索引用降序往往比升序性能高。
这个不是性能问题,但也很重要,在存储过程中应使用scope_identity()函数来获得最新的标量,而不是@@Identity这个全局变量,因为@@Identity会受到触发器的影响而失去正确值。
一次SQL调优数据库性能问题后的过程(300W)_MsSql
时间: 2024-12-28 06:59:21
一次SQL调优数据库性能问题后的过程(300W)_MsSql的相关文章
一次SQL调优数据库性能问题后的过程(300W)
将绝大部分的SQL查询改为存储过程,这样的操作毫无疑问可以提高部分性能. 凡是使用"select * from xxx"的操作一律具体到所需字段. 使用join连接2个以上大量数据的表,且基础数据表变化不大的查询一律使用视图,并为此视图建立索引.理由来自SQL Server联机帮助手册: "对于标准视图而言,为每个引用视图的查询动态生成结果集的开销很大,特别是对于那些涉及对大量行进行复杂处理(如聚合大量数据或联接许多行)的视图.如果在查询中频繁地引用这类视图,可通过对视图创建
SQL 调优1
SQL 调优1 调整的方法调整的工具内存组件调整 shared_pool data_buffer pga IO性能文件确定 调整的方法:调整的流程 架构设计 建模 程序 数据库 硬件调整 每次只调整一个地方 top 消耗资源最多 执行的次数最多 执行的时间最长 达到优化的目标就不优化了 优化的过程中一定不要产生新的性能问题 ----->熟悉别人的生产环境 调整的工具:1 v$
ORACLE SQL调优之'PLAN_TABLE' is old version
在为国投做SQL调优时,他们开发说不要动现在的SQL,调整一下执行计划即可,即查询某个表时执行特定的执行计划.乍一听,我是吓了一跳! 由于他们开发不让动SQL结构(该SQL经过PLSQL优化后有500多行,其是2层嵌套递归查询,外边一个SQL如图1-2,外层SQL的每一个列是一个子查询如下图1-1,递归子查询有32个),所以只能从SQL涉及的表.索引下手,查找问题的具体原因及解决办法.我的做法是,先查看了SQL涉及的表的统计信息,问题SQL涉及了8张表(最大的表有300M左右,小表只有几M
sql 调优 oracle 执行速度再快一点
问题描述 sql 调优 oracle 执行速度再快一点 select psf.pol_num, psf.bank_acct_num, cba_dda.bank_acct_nm from tbank_pos_slip_files psf, tclient_policy_links cpl_dda, tclient_bank_accounts cba_dda where cpl_dda.cli_num = cba_dda.cli_num and cpl_dda.bank_acct_typ = cba
使用sqld360进行特定SQL调优分析
系统性能问题通常是一个综合性的问题,用户对系统的反馈,通常是一个"慢"字.对调优人员,要从网络.应用服务器.数据库服务器等多个层面进行定位,发现瓶颈.如果落实到数据库层面,执行SQL速度慢就是开发运维DBA所需要关注的范畴. 对系统SQL的调优,一般而言不是"一锤子"买卖.而且,性能问题SQL也都遵循"二八原则",即百分之八十的性能问题,是由百分之二十的SQL语句引起的.所以,每次集中处理两到三个SQL,之后看效果再决定下一步处理的方式,
Linux系统性能调优之性能分析
性能调优的第一步是性能分析,下面从性能分析着手进行一些介绍,尤其对Linux性能分析工具vmstat的用法和实践进行详细介绍. 1.性能分析的目的 1)找出系统性能瓶颈(包括硬件瓶颈和软件瓶颈): 2)提供性能优化的方案(升级硬件?改进系统系统结构?): 3)达到合理的硬件和软件配置: 4)使系统资源使用达到最大的平衡.(一般情况下系统良好运行的时候恰恰各项资源达到了一个平衡体,任何一项资源的过渡使用都会造成平衡体系破坏,从而造成系统负载极高或者响应迟缓.比如CPU过渡使用会造成大量进程等待CP
通过机器学习来自动调优数据库
本文是卡耐基梅隆大学的 Dana Van Aken.Andy Pavlo 和 Geoff Gordon 所写.这个项目展示了学术研究人员如何利用 AWS Cloud Credits for Research Program 来助力他们的科技突破的. 数据库管理系统(DBMS)是任何数据密集应用的关键部分.它们可以处理大量数据和复杂的工作负载,但同时也难以管理,因为有成百上千个"旋钮"(即配置变量)控制着各种要素,比如要使用多少内存做缓存和写入磁盘的频率.组织机构经常要雇佣专家来做调优,
关于JVM命令行标志您不知道的5件事:调优JVM性能和Java运行时
JVM 是多数开发人员视为理所当然的 Java 功能和性能背后的重负荷机器.然而,我们很少有人能理解 JVM 是如何进行工作的 - 像任务分配和垃圾收集.转动线程.打开和关闭文件.中断和/或 JIT 编译 Java 字节码,等等. 不熟悉 JVM 将不仅会影响应用程序性能,而且当 JVM 出问题时,尝试修复也会很困难. 本期 5 件事 系列 将介绍一些命令行标志,您可以使用它们来诊断和调优您的 Java 虚拟机性能. 1. DisableExplicitGC 我已记不清有多少次用户要求我就应用程
CloudDBA最佳实践-TOP SQL优化分析数据库性能问题
云数据库CloudDBA诊断报告的TOP SQL优化是非常实用的功能,我们可以通过TOP SQL去诊断数据库中各种问题,比如性能出现下降,数据库压力出现波动,下面介绍两个线上生产案例. 一. 利用CloudDBA TOP SQL找出数据库规格升级而性能下降的元凶 最近在协助用户进行系统重构,RDS测试选型自然成为了本项目的一个重点,但是用户在测试不同规格的时候发现大规格的实例性能居然不如小规格,4C32G规格性能比8C64G规格高出10%,其性能监控也是非常的正常,4C3