About me:Oracle ACE pro,optimistic,passionate and harmonious. Focus on ORACLE,MySQL and other database programming,peformance tuning,db design, j2ee,Linux/AIX,Architecture tech,etc
全部博文(189)
发布时间:2022-04-14 15:32:03
为了保障数据库升级后性能稳定,我们将采用Oracle性能分析器(SQL Performance Analyzer)来预测数据库的关键SQL在新版本上的性能情况,以便提前发现问题并做相关性能优化。
大型业务关键应用程序要在响应时间、吞吐量、运行时间和可用性方面提供特定服务级别的保证。对系统的任何更改(如升级数据库或修改配置)通常都需要进行全面的测试和验证,然后才能在生产系统中实施这些更改。在移到生产系统之前为了保证安全,数据库管理员(DBA) 必须让测试系统承受与生产环境中的工作量很近似的压力,以便分析系统级更改对整体SQL 性能的影响,并在在移到生产之前进行必要的优化。Oracle Database11g引入了SQL 性能分析器;使用该工具可以准确地预测系统更改对SQL 语句性能的影响。这种功能可向DBA 提供有关SQL 语句性能的详细信息,例如,执行前后的统计信息,提高或降低性能的语句。这样,你就在测试环境中先进行更改,以确定数据库升级是否会影响SQL性能。......【阅读全文】
发布时间:2022-04-12 10:28:15
因为优化器还不够强大,还有很多限制,或者因为一些逻辑原因,分析认为SQL要走正确的索引比较好,但是事实却无法正确利用索引。
这时候,写的SQL必须除了统计信息之外,要能够给优化器足够多的其他需要的信息,让优化器能够选择更好的执行计划。......【阅读全文】
发布时间:2025-04-26 15:45:13
对于完全存在性判断,子查询非相关的。。。三大数据库的CBO都是差不多的处理逻辑:
非相关的希望单独执行一次即可,然后结果缓存下来,对于存在性判断的非相关子查询,希望只执行一次只查询一条。
......【阅读全文】
发布时间:2025-04-26 15:15:07
组合索引要符合leftmost prefix规则,前导列是范围的,后续列条件不能index access,只能index filter...
但是貌似有例外:
MySQL的like后通配,between,>=,=1 and b>3,“如果a是整数”
然后索引访问实际上是拆成两份:a=1 and b>3 和a>1 and b>3,前者能真正用到两个列索引访问,后者只能用到a>1
那么,如果存在a>1的数据很少,a=1的数据多,但是a=1 and b>3的数据少,
那么where a>=1 and b>3就比a>0 and b>3的效率高,因为写成
a>0 and b>3则只能用到a>0,而a>0是等价于a>=1的。。。但是实际上访问效率不一样,......【阅读全文】
发布时间:2025-02-20 08:40:55
having普通列(非聚合条件)提升到where里,在分组之前过滤,如果having的普通列可以走索引效率好,这种提升有好处
测试下来,只有pg支持,MySQL文档说支持,但是测试部支持,oracle不支持
能放到where里的条件不要放到having里,是编写SQL的准则之一......【阅读全文】