`
jackson_jar
  • 浏览: 37026 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

收集的经典的数据库的调优

阅读更多

很久不搞sql了。整天就是java, java,也挺无聊的。

其实想想,sql还是挺好玩的,尤其是把别人吭哧吭哧几百行的stored procedure改写成一个简洁的query,或者一个本来要跑十分钟的stored proc改成几秒钟,感觉还是满爽的。

闲来无事,把一些小技巧回忆下来,省得以后考人的时候想不起来了。

1。一个基金performance表,记录着每个基金的每个月相比于前一个月的增长百分率,比如:
一月: 2.1(%)
二月: -0.5 (%)
三月:
...
十二月:15 (%)

基金用基金ticker来标识。

请列出每个基金从去年五月到今年五月的总共增长。

2。每个基金每个月都有打分,从一分到五分。请列出最近一年内每个基金被打五分的次数,四分的次数,三分的次数。如果一个基金被打至少三分的次数少于两次,就不要列出来了。

3。请针对上一年列出每个基金增长最好的那个月,包括基金ticker,当月的增长百分比,当月打分。如果两个月增长幅度相同,选择打分高的那个月;如果打分也相同,选择最近发生的那个月。

4。假设基金表不小心出现了重复数据,也就是ticker, 月份都相同,但是id是主键,唯一的。请删除重复记录。对重复记录,保留打分高的那条,如果打分也一样,保留其中任意一条。(其实,这个和三是一样的,不过算一个比较常见的dba要面临的问题)

(答案回头有时间写出来。提示:珍爱生命,远离存储过程!)

(I have discovered a truly marvelous proof of this, which this margin is too narrow to contain.)


下面是答案
==========================================================================================================================================================
题目一:

select ticker, (exp(sum(log(1 + percent/100))) - 1) / 100 as accumulated_percent  
from perf where date between startdate and enddate group by ticker 

题目二:

Java代码
select ticker, count(*) as times into #five_star from perf  
where star = 5 and date between startdate and enddate group by perf  
 
select ticker, count(*) as times into #four_star from pef where star = 4 and date  
between startdate and enddate group by perf  
 
select ticker, count(*) as times into #three_star from perf where star = 3 and date  
between startdate and enddate group by perf  
 
select t.ticker, isnull(s5.times, 0) as star5, isnull(s4.times, 0) as star4, isnull(s3.times, 0) as star3  
from ticker t  
left join  #five_star s5 on t.ticker = s5.ticker  
left join #four_star s4 on t.ticker = s4.ticker  
left join #three_star s3 on t.ticker = s3.ticker  
where isnull(s5.times, 0) + isnull(s4.times, 0) + isnull(s3.times, 0) >= 2 


上面是复杂代码:
下面是简洁代码:
select ticker,  
sum(case star when 5 then 1 else 0 end) star5,   
sum(case star when 4 then 1 else 0 end) star4,  
sum(case star when 3 then 1 else 0 end) star3  
from perf  
where date between startdate and enddate  
group by ticker  
having sum(case when star >=3 then 1 else 0 end) >=2 

题目三:


select x.ticker, x.star, x.percent from perf x  
left join perf nothing  
on x.ticker = nothing.ticker and  
(x.percent < nothing.percent or  
  (x.percent=nothing.percent and x.star < nothing.star or  
      x.star=nothing.star and x.date < nothing.date)  
)  
where nothing.ticker is null 

简洁代码:
select x.*  
from perf x left join perf nothing  
on x.ticker = nothing.ticker and x.(percent, star, date) < nothing.(percent, star, date)  
where nothing.ticker is null 

题目四:

select x.id  
from perf x left join perf nothing  
on x.(ticker, date) = nothing.(ticker, date) and x.(star, id) < nothing.(star, id)  
where nothing.id is null 

分享到:
评论

相关推荐

    MySQL数据库调优技术大全

    ### MySQL数据库调优技术大全 #### 一、数据库与关系代数 - **关系代数基础**:在进行MySQL查询优化之前,理解关系代数的基本概念是非常重要的。关系代数是一种用于描述关系数据库操作的形式语言,它可以帮助我们...

    Greenplum数据库调优1

    《Greenplum数据库调优1》 在大数据处理领域,Greenplum数据库因其高效的数据处理能力和优秀的并行计算性能而受到广泛关注。然而,为了确保其性能最大化,数据库调优是必不可少的一环。本文将深入探讨Greenplum...

    数据库调优原理及方法.pdf

    ### 数据库调优原理及方法 #### 一、引言 在当今数据驱动的时代背景下,数据库作为信息系统的核心组件,其性能直接影响着整个系统的稳定性和效率。数据库调优是指通过一系列的技术手段来提升数据库的性能,使得...

    Oracle数据库调优.doc

    Oracle数据库调优 Oracle数据库调优是指对Oracle数据库的性能进行优化,以提高数据库的运行效率和稳定性。下面是Oracle数据库调优的知识点: 1. 优化的思路:什么时候开始做优化,什么时候不做?找出瓶颈所在 在...

    DB2 数据库调优浅谈

    ### DB2 数据库调优浅谈 #### 数据库调优的视角 在进行数据库调优时,不同的视角可能会带来不同的解决方案。通常来说,可以从以下几个方面考虑: - **应用优化**:针对应用程序本身的优化,比如查询逻辑、事务...

    基于AWR报告的安徽电信数据库调优研究.pdf

    安徽电信的数据库调优研究首先需要收集AWR报告,分析其包含的系统资源使用情况,如CPU利用率、内存使用、磁盘I/O等。然后,通过分析找出高CPU消耗、长时间等待事件、慢查询等问题。例如,如果发现缓冲区高速缓存的...

    Oracle数据库编程调优手册

    Oracle数据库编程调优手册是一本针对数据库开发者和管理员的重要参考资料,旨在帮助他们提升Oracle数据库的性能和效率。手册涵盖了多个关键领域,包括数据加载优化、UPDATE语句的优化、DELETE操作的改进、DBA级别的...

    从码农到工匠,这些.NET性能调优技巧,你不得不知(含:Core、EF、数据库调优).docx

    本文主要聚焦于.NET Core、Entity Framework(EF)以及数据库调优这三个关键领域。 .NET Core是微软推出的跨平台、高性能的应用框架,其性能调优主要包括以下几个方面: 1. **编译优化**:使用Release模式进行编译...

    Sybase IQ 性能调优Server和数据库调优VPPT学习教案.pptx

    3. **数据库服务器 / 数据库调优**: - **Cache调优**:调整缓存大小,优化缓存策略,提高数据读取效率。 - **CPU/Threads调优**:根据系统负载调整CPU使用率和线程数量,平衡计算资源分配。 - **数据库选项调整*...

    数据库性能调优.原理与技术

    通过监控工具收集数据库运行时的各种统计信息,如查询执行时间、CPU和内存的使用情况,可以为调优提供数据支持。通过定期分析慢查询日志、执行计划和性能指标,可以发现并定位数据库的性能瓶颈。根据分析结果,针对...

    数据库性能调优--原理与技术2.pdf

    ### 数据库性能调优——原理与技术(针对Oracle) #### 一、数据库性能调优概述 在当前数据密集型的应用环境中,数据库系统的性能直接影响着企业的业务效率和用户体验。《数据库性能调优——原理与技术2》这本书...

    数据库调优

    数据库调优是IT领域中一个至关重要的主题,特别是在大规模数据处理和高并发应用中。本文主要聚焦于DB2数据库的性能优化,这是IBM提供的一款强大、功能丰富的关系型数据库管理系统,广泛应用于企业和组织的核心业务...

    Oracle数据库的调优.pdf

    在《Oracle数据库的调优》这个主题中,虽然给定的部分内容似乎与Oracle数据库调优无关,但我们可以从中提取出一个通用的概念——模糊数学形态学,这在数据处理和图像分析中有应用,而这些领域往往需要高效的数据存储...

    5.PostgreSQL数据库查询调优分享1

    PostgreSQL 数据库查询调优分享 PostgreSQL 是一个功能强大且可靠的开源关系数据库管理系统。随着数据规模的不断增长和查询复杂度的增加,查询性能的优化变得越来越重要。本文将分享 PostgreSQL 数据库查询调优的...

    数据库性能调优技术系列

    数据库性能调优是IT领域中的一个关键话题,特别是在大数据时代,高效、稳定的数据处理能力直接影响着业务的运行效率。本系列将深入探讨如何优化数据库性能,以提高数据存取速度,减少延迟,提升整体系统响应时间。...

    SQL数据库性能调优

    8. **分析调优**:使用性能分析工具(如SQL Server Profiler、Dynamic Management Views等)收集性能数据,分析慢查询、死锁等问题,提出针对性优化建议。 9. **调整与修正**:根据性能监控和分析结果,调整数据库...

    鲲鹏BoostKit数据库使能套件 调优指南.pdf

    数据库调优是指对数据库的性能进行优化,以提高数据库的响应速度和处理能力。调优的目的是减少数据库的响应时间,提高数据库的吞吐量和可靠性。鲲鹏BoostKit数据库使能套件提供了多种调优方法和工具,帮助用户快速...

    Oracle数据库查询调优

    ### Oracle数据库查询调优知识点详解 #### 一、概述 在Oracle数据库中,查询调优是提高系统性能的关键环节之一。随着数据量的增长和技术的进步,优化查询变得日益重要。本篇将详细介绍如何识别问题、收集数据、分析...

    ORACLE数据库性能调优.docx

    Oracle数据库性能调优是DBA日常工作中至关重要的任务,它涉及到多个层面的分析和改进。在面对应用程序响应缓慢的问题时,通常需要从数据库层面、操作系统层面以及SQL查询优化三个方面进行深入排查。 首先,关注操作...

Global site tag (gtag.js) - Google Analytics