精华内容
下载资源
问答
  • 效果:SparkStreaming中的Receivers,恰好Kafka有发布/订阅 ,然而:此种方式企业不常用,说明有BUG,不符合企业需求。因为:接收到的数据存储在Executor的内存,会出现数据漏处理或者多处理状...

    -1,基于接收者的方法

    算子:KafkaUtils.createStream
    方法:PUSH,从topic中去推送数据,将数据推送过来
    API:调用的Kafka高级API
    效果:SparkStreaming中的Receivers,恰好Kafka有发布/订阅 ,然而:此种方式企业不常用,说明有BUG,不符合企业需求。因为:接收到的数据存储在Executor的内存,会出现数据漏处理或者多处理状况
    解释:这种方法使用Receiver来接收数据。Receiver是使用Kafka高级消费者API实现的。与所有的接收者一样,通过Receiver从Kafka接收的数据存储在Spark执行程序exector中,然后由Spark Streaming启动的作业处理数据。但是,在默认配置下,这种方法可能会在失败时丢失数据。为了确保零数据丢失,您必须在Spark Streaming(在Spark 1.2中引入)中额外启用写入日志,同时保存所有接收到的Kafka数据写入分布式文件系统(例如HDFS)的预先写入日志,以便所有数据都可以在失败时恢复。
    缺点
    ①、Kafka中的主题分区与Spark Streaming中生成的RDD的分区不相关。因此,增加主题特定分区KafkaUtils.createStream()的数量只会增加在单个接收器中使用哪些主题消耗的线程的数量。在处理数据时不会增加Spark的并行性
    ②、多个kafka输入到DStream会创建多个group和topic,用于使用多个接收器并行接收数据
    ③、如果已经使用HDFS等复制文件系统启用了写入日志,则接收到的数据已经在日志中复制。因此,输入流的存储级别为存储级别StorageLevel.MEMORY_AND_DISK_SER

    -2,直接方法(无接收者)

    算子:KafkaUtils.createDirectStream
    方式:PULL,到topic中去拉取数据。
    API:kafka低级API
    效果:每次到Topic的每个分区依据偏移量进行获取数据,拉取数据以后进行处理,可以实现高可用
    解释:在Spark 1.3中引入了这种新的无接收器“直接”方法,以确保更强大的端到端保证。这种方法不是使用接收器来接收数据,而是定期查询Kafka在每个topic+分partition中的最新偏移量,并相应地定义要在每个批次中处理的偏移量范围。当处理数据的作业启动时,Kafka简单的客户API用于读取Kafka中定义的偏移范围(类似于从文件系统读取文件)。请注意,此功能在Spark 1.3中为Scala和Java API引入,在Spark 1.4中针对Python API引入。
    优势
    ①、简化的并行性:不需要创建多个输入Kafka流并将其合并。与此同时directStream,Spark Streaming将创建与使用Kafka分区一样多的RDD分区,这些分区将全部从Kafka并行读取数据。所以在Kafka和RDD分区之间有一对一的映射关系,这更容易理解和调整

    ②、效率:在第一种方法中实现零数据丢失需要将数据存储在预写日志中,这会进一步复制数据。这实际上是效率低下的,因为数据被有效地复制了两次,一次是由Kafka,另一次是由预先写入日志(Write Ahead Log)复制。此方法消除了这个问题,因为没有接收器,因此不需要预先写入日志。只要你有足够的kafka保留,消息可以从kafka恢复

    ③、精确语义:第一种方法是使用Kafka的高级API在Zookeeper中存储消耗的偏移量。传统上这是从Kafka消费数据的方式。虽然这种方法(合并日志)可以确保零数据丢失,但在某些失败情况下,很小的几率两次数据都同时丢失,发生这种情况是因为Spark Streaming可靠接收到的数据与Zookeeper跟踪的偏移之间的不一致。因此,在第二种方法中,我们使用不使用Zookeeper的简单Kafka API。在其检查点内,Spark Streaming跟踪偏移量。这消除了Spark Streaming和Zookeeper / Kafka之间的不一致性,因此Spark Streaming每次记录都会在发生故障时有效地接收一次。

    请注意,这种方法的一个缺点是它不会更新Zookeeper中的偏移量,因此基于Zookeeper的Kafka监控工具将不会显示进度。但是,您可以在每个批次中访问由此方法处理的偏移量,并自己更新Zookeeper

    展开全文
  • 企业合并从合并方式划分,包括控股合并、吸收合并和新设合并 1.控股合并  合并方(购买方)通过企业合并交易或事项取得对被合并方(被购买方)的控制权,企业合并后能够通过所取得的股权等主导被合并方的生产经营...

    企业合并从合并方式划分,包括控股合并、吸收合并和新设合并

    1.控股合并

        合并方(购买方)通过企业合并交易或事项取得对被合并方(被购买方)的控制权,企业合并后能够通过所取得的股权等主导被合并方的生产经营决策并自被合并方的生产经营活动中获益,被合并方在企业合并后,仍维持其独立法人资格继续经营的,为控股合并。

        该类合并中,因合并方通过企业合并交易或事项取得了对被合并方的控制权,被合并方成为其子公司,在企业合并发生后,被合并方应当纳入合并方合并财务报表的编制范围,从合并财务报表角度,形成报告主体的变化。

     

    2.吸收合并

       合并方在企业合并中取得被合并方的全部净资产,并将有关资产、负债并入合并方自身的账簿和报表进行核算。企业合并后,注销被合并方的法人资格,由合并方持有合并中取得的被合并方的资产、负债,在新的基础上继续经营,该类合并为吸收合并。

       吸收合并中,因被合并方在合并发生以后被注销,从合并方的角度需要解决的问题是,其在合并日取得被合并方有关资产、负债的入账价值之间存在差额的处理。

       企业合并继后期间,合并方应将合并中取得的资产、负债作为本企业的资产、负债核算。

     

    3.新设合并

      参与合并的各方在企业合并后法人资格均被注销,重新注册成立一家新的企业,由新注册成立的企业持有参与合并各企业的资产、负债在新的基础上经营,为新设合并。

     

      企业分立有两种基本类型,三种实现分立的技术方式:即存续分立(让产分股式分立、让产赎股式分立)和新设分立(股本分割式分立)。

    按其规定:分立,是指一家企业(被分立企业)将部分或全部资产分离转让给现存或新设企业(分立企业),被分立企业股东换取分立企业的股权或非股权支付,实现企业的依法分立。被分立企业失去的是标的资产,标的资产的接受者是分立企业。被分立企业本身不会获得转让资产标的的对价,标的资产对价的接受者是被分立企业的股东。被分立企业可以继续存在,也可以不再继续存在。

    首先从大类上,我们根据被分离企业分立后是否存在将分立分为存续分立和新设分立。存续分立是指分立后,被分立企业仍存续经营,并且不改变企业名称和法人地位,同时分立企业作为另一个独立法人而存在。存续分立后分立企业的股份由被分立企业的股东持有。新设分立则是将被分立企业分设成两个或两个以上的企业,被分立企业依法注销。

     

      存续分立通常采用让产分股式和让产赎股式两种技术方式。让产分股式分立是指将部分资产分离转让出去成立新的公司或转让给现存的公司,将接受资产的子公司的股权分给被分立企业的全部股东。同时,全部股东在被分立企业的股本按比例减少,有时也可以保持不变。

    注:让产分股式分立的后果是企业分家但股东不分家,分立后被分立企业和分立企业的股东是一致的。

     

      让产赎股式分立是指将被分立企业部分资产分立出去成立新的子公司或现存的公司,将新公司的股权分配给被分立企业的部分股东,换回其在被分立企业的股份,从而使这部分股东在被分立企业不再保有股份。

      注:让产赎股式分立的后果不仅是企业分家,股东也跟着分家,一部分股东依然占有被分立企业,一部分股东占有分立企业。

     

      新设分立通常采用股本分割式分立,是将公司分割组成两家以上新的公司,原公司解散。股本分割可分为两种典型做法,第一类属于企业分家,股东不分家。被分立企业的全部股东按原持股比例均衡地同时取得全部分立企业的股权,原持有的被分立企业的股票依法注销,被分立企业依公司法规定解散。第二类属于企业分家、股东也分家。被分立企业的不同部分股东取得不同分立企业的股票,同样,被分立企业依据公司法规定解散,股票依法注销。

     

    展开全文
  • “直接基于成本法”与“模拟权益法”两种合并报表编制模式比较与分析 ——对新准则的响应(一) 在编制合并财务报表时,存在两种模式,一种方法是直接基于成本法编制,一种是模拟权益法编制。两种方法编制的...
    “直接基于成本法”与“模拟权益法”两种合并报表编制模式比较与分析
    ——对新准则的响应(一)
    在编制合并财务报表时,存在两种模式,一种方法是直接基于成本法编制,一种是模拟权益法编制。两种方法编制的合并财务报表最终结果是一致的,只是处理流程和方法有差异。总体来说,直接基于成本法编制比较简洁且更符合实体理论,而模拟权益法编制则相对复杂与难以理解,且不利于实体理论的贯彻。我国2006版的旧合并财务报表准则第十一条中明确规定:“合并财务报表应当以母公司和其子公司的财务报表为基础,根据其他有关资料,按照权益法调整对子公司的长期股权投资后,由母公司编制”,明确要求采用模拟权益法,相关企业会计准则讲解和CPA等权威教材都是采用模拟权益法,由此更加简洁的直接基于成本法编制在实务中一直没有得到应有的应用和普及。2014年新颁布的《企业会计准则第33号——合并财务报表》相比2006年的旧合并财务报表准则发生了诸多变化,其中有一个变化就是:2014年新准则第二十六条改为“合并财务报表应当以母公司和其子公司的财务报表为基础,根据其他有关资料,编制合并财务报表”。其变化的关键点就在于取消老准则中要求企业必须“按照权益法调整对子公司的长期股权投资后”编制合并报表的规定,即不再硬性规定企业需要按照模拟权益法编制合并财务报表,企业可以按模拟权益法进行编制,也可以直接基于成本法编制。这一变化可能从形式上并不重大,而且在《企业会计准则讲解2010》中提及“合并报表准则也允许企业直接在对子公司的长期股权投资采用成本法核算的基础上编制合并财务报表,但是所生成的合并财务报表应当符合合并财务报表准则的相关规定”,所以也算不上全新变化。不过,在企业会计准则讲解中突破企业会计准则的限制毕竟不是很适合,所以这次在新修订的准则中彻底删除了要求企业按照模拟权益法编制合并财务报表的规定,这也助于在实务中使用和推广“直接基于成本法”编制合并财务报表。
           之前已有部分文献探讨过直接基于成本法如何编制合并财务报表,在相关专业的会计实务论坛,相关专业人士也讨论过直接基于成本法编制合并财务报表,这些文献和讨论都为该方法的完善作出了有益的贡献。但是,之前的文献与探讨普遍存在一些问题:第一,已有文献中通常直接讲解成本法下该如何编制合并财务报表,没有就同一案例结合模拟权益法进行对比分析,充分说明最后两种编制方法最终结果的一致性,并揭示编制方法的差异,不利于广大会计人员深入理解这两种方法并理清二者利弊;第二,已有的文献和探讨通常存在一些用语上的问题。由于存在的用语问题导致对某些处理产生了较多歧义和误解,产生了一些不必要的争论;第三,已有的文献和探讨都是基于读者有一定合并报表基础这一前提进行的,对相关问题的分析和解读不是十分透彻,初学者很可能不知所云,不利于广大财务人员真正理解和掌握合并财务报表编制的方法,更多时候变成死记硬背,而不是灵活运用。
           基于以上的原因,在此笔者以最新出版的2014年CPA《会计》教材第二十五章合并财务报表的案例(第433页例25),详细解读模拟权益法的编制原理,并用同一案例,示范“直接基于成本法”如何编制。该案例是同一控制下企业合并,跟非同一控制下编制方法存在一定差异,不过这种差异是由是否同一控制引起的,并非模拟权益法与直接基于成本法两种编制方法的差异,掌握了同一控制下直接基于成本法如何编制,非同一控制下也可触类旁通。限于文章的篇幅和重点,本文重点讲解基本原理,详细分析其背后的逻辑基础,至于涉及的其他特殊事项以及连续编制合并财务报表等问题,本文并不进行探讨(可以在以后的文章中作持续讨论)。基于模拟权益法与直接基于成本法两种方法的差异主要体现在长期股权投资与所有者权益的合并处理上,其他项目的抵消调整两种方法是基本一致的,所以本文重点讨论二者的主要差异,对于其他的合并调整与抵消事项,本文也不做过多讨论。
           【例1】 甲公司20×2年1月1日以28600万元的价格取得A公司80%的股权。A公司净资产的公允价值为35000万元。甲公司在购买A公司过程中发生审计、评估和法律服务等相关费用120万元。上述价款均以银行存款支付。甲公司与A公司均为同一控制下的企业。A公司采用的会计政策与甲公司一致。A公司20×2年1月1日的资产负债表见表1中A公司的数据。
           一、合并日的处理与抵消分录
           由于A公司与甲公司均为同一控制下的企业,按同一控制下企业合并的规定进行处理。根据A公司资产负债表,A公司股东权益总额为32000万元,其中股本为20000万元,资本公积为8000万元,盈余公积为1200万元,未分配利润为2800万元。合并后,甲公司在A公司股东权益中所拥有的份额为25600万元,甲公司对A公司长期股权投资的初始投资成本为25600万元,二者差额调整资本公积与留存收益。至于购买该股权过程中发生的审计、评估等相关费用,则直接计入当期损益,即计入当期管理费用。
           母公司在对A公司投资进行账务处理后编制的资产负债表,以及A公司当日的资产负债表如表1所示。
           在本例中,对于甲公司为购买A公司所发生的审计及评估等费用实际上已支付给会计事务所等中介机构,不属于甲公司与A公司所构成的企业集团内部交易,不涉及抵消处理的问题。
           (一)模拟权益法下编制合并日抵消分录(合并日抵消分录的逻辑后面部分详细分析)
           编制合并日合并资产负债表时,甲公司应当进行如下抵消处理:
           借:股本                     20000
                 资本公积              8000
                盈余公积              1200
               未分配利润           2800
               贷:长期股权投资       25600
                      少数股东权益       6400
           (二)直接基于成本法编制合并日抵消分录
           无论是成本法下直接编制还是模拟权益法,对于合并日的抵消分录,是一致的。
           根据上述抵消分录,编制合并工作底稿如表1所示:
    表1                  合并工作底稿                     单位:元
    项目
    甲公司
    A公司
    合计数
    抵消分录
    少数股东权益
    合并数
    借方
    贷方
    流动资产:
                 
    货币资金
    9000
    4200
    13200
         
    13200
    交易性金融资产
    4000
    1800
    5800
         
    5800
    应收票据
    4700
    3000
    7700
         
    7700
    应收账款
    5800
    3920
    9720
         
    9720
    预付款项
    2000
    880
    2880
         
    2880
    应收股利
    4200
    0
    4200
         
    4200
    其他应收款
    0
    0
    0
         
    0
    存货
    3100
    20000
    51000
         
    51000
    其他流动资产
    1300
    1200
    2500
         
    2500
    项目
    甲公司
    A公司
    合计数
    抵消分录
    少数股东权益
    合并数
    借方
    贷方
    流动资产合计
    62000
    35000
    97000
         
    97000
    非流动资产:
                 
    可供出售金融资产
    11400
    0
    11400
         
    11400
    持有至到期投资
    10000
    0
    10000
         
    10000
    长期股权投资
    25600
    0
    25600
     
    25600
     
    0
    固定资产
    21000
    18000
    39000
         
    39000
    在建工程
    20000
    3400
    23400
         
    23400
    无形资产
    4000
    1600
    5600
         
    5600
    商誉
    2000
    0
    2000
         
    2000
    其他非流动资产
    0
    0
    0
         
    0
    非流动资产合计
    94000
    23000
    117000
     
    25600
     
    91400
    资产总计
    156000
    58000
    214000
     
    25600
     
    188400
    流动负债:
                 
    短期借款
    12000
    5000
    17000
         
    17000
    交易性金融负债
    3800
    0
    3800
         
    3800
    应付票据
    10000
    3000
    13000
         
    13000
    应付账款
    18000
    4200
    22200
         
    22200
    预收款项
    3000
    1300
    4300
         
    4300
    应付职工薪酬
    6000
    1600
    7600
         
    7600
    应交税费
    2000
    1200
    3200
         
    3200
    应付股利
    4000
    4000
    8000
         
    8000
    其他应付款
    0
    0
           
    0
    其他流动负债
    1200
    700
           
    1900
    流动负债合计
    60000
    21000
           
    81000
    非流动负债:
                 
    长期借款
    4000
    3000
    7000
         
    7000
    应付债券
    20000
    2000
    22000
         
    22000
    项目
    甲公司
    A公司
    合计数
    抵消分录
    少数股东权益
    合并数
    借方
    贷方
    长期应付款
    2000
    0
    2000
         
    2000
    其他非流动负债
    0
    0
    0
         
    0
    非流动负债合计
    26000
    5000
    31000
         
    31000
    负债合计
    86000
    26000
    112000
         
    112000
    股东权益:
                 
    股本
    40000
    20000
    60000
    20000
       
    40000
    资本公积
    10000
    8000
    18000
    8000
       
    10000
    盈余公积
    11000
    1200
    12200
    1200
       
    11000
    未分配利润
    9000
    2800
    11800
    2800
       
    9000
    股东权益合计
    70000
    32000
    102000
    32000
       
    70000
    少数股东权益
             
    6400
    6400
    负债和股东权益总计
    156000
    58000
    214000
    32000
     
    6400
    188400
       二、合并日后合并财务报表的编制
           在取得子公司后,子公司在母公司的控制下从事经营活动,并按照母公司统一的会计政策进行日常核算,编制个别财务报表。根据现行会计准则,母公司在取得子公司后,应当按照相关法规的要求,将所有的子公司的财务报表予以合并,编制和对外报送合并财务报表。
           在合并日后编制合并财务报表时,直接基于成本法编制与模拟权益法的区别就体现出来。下面区分两种方法,分别详细分析其编制过程和内在逻辑。
           (一)模拟权益法下编制合并日后相关分录(不能叫抵消分录,只能叫相关分录,原因下面详述)
           编制合并日后合并财务报表时,首先将母公司对子公司长期股权投资由成本法核算的结果调整为权益法核算的结果,使母公司对子公司长期股权投资项目反映其在子公司所有者权益中所拥有权益的变动情况;其次对母公司对子公司长期股权投资项目与子公司所有者权益项目等内部交易相关的项目进行抵消处理,将内部交易对个别财务报表的影响予以抵消:最后在编制合并日合并工作底稿的基础上,编制合并财务报表。
           1.长期股权投资成本法核算的结果调整为权益法核算的结果
           由于甲公司对A公司的长期股权投资采用成本法核算,在其个别财务报表中长期股权投资也是以成本法核算的结果反映的。甲公司在编制合并财务报表时,首先必须编制调整分录,将母公司对子公司长期股权投资由成本法核算调整为权益法核算的结果,使母公司对子公司长期股权投资项目反映其在子公司所有者权益中所拥有的份额。从理论上说,母公司可以按照权益法核算的要求,按照对子公司长期股权投资调整为权益法核算的结果,重新编制一份当期母公司的财务报表,用于编制合并财务报表。但目前一般的做法是在合并工作底稿中,按照权益法核算的要求,通过编制调整分录将长期股权投资成本法核算调整为权益法核算的结果,然后在此基础上再编制内部交易抵消分录,将母公司与子公司、子公司相互之间的内部交易对个别财务报表的影响抵消后编制合并财务报表。
           将成本法核算调整为权益法核算时,应当自取得对子公司长期股权投资的年度起,逐年按照子公司当年实现的净利润中属于母公司享有的份额,调整增加对子公司长期股权投资的金额,并调整增加当年投资收益;对于子公司当期分派的现金股利或宣告分派的股利中母公司享有的份额,则调整冲减长期股权投资的账面价值,同时调整减少原投资收益。之所以要按子公司分派或宣告分派的现金股利调整减少投资收益,是因为在成本法核算的情况下,母公司在当期的财务报表中已按子公司分派或宣告分派的现金股利确认投资收益。
           在取得子公司长朋股权投资的第二年,将成本法调整为权益法核算的结果时,则在调整计算第一年年末权益法核算的对子公司长期股权投资的金额的基础上,按第二年子公司实现的净利润中母公司所拥有的份额,调增长期股权投资的金额;按子公司分派或宣告分派的现金股利中母公司所拥有的份额,调减长期股权投资的金额。以后年度的调整,则比照上述做法进行调整处理。
           至于子公司除净损益以外所有者权益的其他变动,在按照权益法对成本法核算的结果进行调整时,应当根据子公司本期除损益以外的所有者权益的其他变动而计入资本公积的金额中所享有的金额,对长期股权投资的金额进行调整,即按照子公司当期计入资本公积的金额中母公司所拥有的份额,在增加长期股权投资的金额的同时,增加自身资本公积。在以后年度将成本法调整为权益法核算的结果时,也必须考虑这一因素对长期股权投资的金额进行调整。
          【例2】 接【例1】。甲公司于20×2年1月1日,以28 600万元的价格取得A公司80%的股权,使其成为子公司。甲公司和A公司20×2年度个别财务报表如表2、表3和表4所示。
    表2                  资产负债表                 会企01表
    编制单位:        20×2年12月31日              单位:万元
    资产
    甲公司
    A公司
    负债和所有者权益
    甲公司
    A公司
    流动资产:
       
    流动负债:
       
    货币资金
    5700
    6500
    短期借款
    10000
    4800
    交易性金融资产
    3000
    5000
    交易性金融负债
    4000
    2400
    应收票据
    7200
    3600
    应付票据
    13000
    3600
    应收账款
    8500
    5100
    应付账款
    18000
    5200
    预付款项
    1500
    2500
    预收款项
    4000
    3900
    应收股利
    4800
    0
    应付职工薪酬
    5000
    1600
    其他应收款
    500
    1300
    应交税费
    2700
    1400
    存货
    37000
    18000
    应付股利
    5000
    1500
    其他流动资产
    1800
    1000
    其他应付款
    300
    700
    流动资产合计
    70000
    43000
    其他流动负债
    2000
    900
         
    流动负债合计
    64000
    29000
         
    非流动负债:
       
    非流动资产:
       
    长期借款
    4000
    5000
    可供出售金融资产
    8000
    0
    应付债券
    20000
    7000
    持有至到期投资
    13000
    4000
    长期应付款
    6000
    0
    资产
    甲公司
    A公司
    负债和所有者权益
    甲公司
    A公司
    长期股权投资
    40000
    0
    其他非流动负债
    0
    0
    固定资产
    28000
    26000
    非流动负债合计
    30000
    12000
    在建工程
    13000
    4200
    负债合计
    94000
    41000
    无形资产
    6000
    1800
         
    商誉
    2000
    0
    股东权益:
       
    其他非流动资产
    0
    0
    股本
    40000
    20000
    非流动资产合计
    110000
    36000
    资本公积
    10000
    8000
         
    盈余公积
    18000
    3200
         
    未分配利润
    18000
    6800
         
    股东权益合计
    86000
    38000
    资产总计
    180000
    79000
    负债和股东权益总计
    180000
    79000
    表3                  利润表                       会企02表
    编制单位:         20×2年度                       单位:万元
    项    目
    甲公司
    A公司
    一、营业收入
    150000
    94800
    减:营业成本
    96000
    73000
    营业税金及附加
    1800
    1000
    销售费用
    5200
    3400
    管理费用
    6000
    3900
    财务费用
    1200
    800
    资产减值损失
    600
    300
    加:公允价值变动损益(损失以“-”号填列)
    0
    0
    投资收益(损失以“-”号填列)
    9800
    200
    二、营业利润(亏损以“-”号填列)
    49000
    12600
    加:营业外收入
    1600
    2400
    减:营业外支出
    2600
    1000
    其中:非流动资产处置损失


    三、利润总额(亏损总额以“-”号填列)
    48000
    14000
    减:所得税费用
    12000
    3500
    四、净利润(净亏损以“-”号填列)
    36000
    10500
    五、每股收益:


    (一)基本每股收益


    (二)稀释每股收益



    表4                           股东权益变动表            会企04表                                                                        
    编制单位:                       20×2年度                 单位:元
    项   目
    甲公司
    A公司
     
    股本
    资本公积
    盈余公积
    未分配利润
    股东权益合计
    股本
    资本公积
    盈余公积
    未分配利润
    股东权益合计
     
     
    一、上年年末余额
    40000
    10000
    11000
    9000
    70000
    20000
    8000
    1200
    2800
    32000
     
    加:会计政策变更










     
    前期差错更正










     
    二、本年年初余额
    40000
    10000
    11000
    9000
    70000
    20000
    8000
    1200
    2800
    32000
     
    三、本年增减变动金额(减少以“-”号填列)










     
    (一)净利润



    36000
    36000



    10500
    10500
     
    (二)直接计入股东权益的利得和损失










     
    1.可供出售金额资产公允价值变动净额










     
    2.权益法下被投资单位其他所有者权益变动的影响










     
    3.与计入股东权益项目相关的所得税影响










     
    4.其他










     
    上述(一)和(二)小计










     
    1.所有者投入资本










     
    项   目
    甲公司
    A公司
     
    股本
    资本公积
    盈余公积
    未分配利润
    股东权益合计
    股本
    资本公积
    盈余公积
    未分配利润
    股东权益合计
     
    2.股份支付计入股东权益的金额
                         
    3.其他










     
    (四)利润分配










     
    1.提取盈余公积


    7000
    7000



    2000
    2000

     
    2.对股东的分配



    20000
    20000



    4500
    4500
     
    3.其他










     
    (五)股东权益内部结转










     
    1.资本公积转增股本










     
    2盈余公积转增股本










     
    3.盈余公积弥补亏损










     
    4.其他










     
    四、本年年末余额
    40000
    10000
    18000
    18000
    86000
    20000
    8000
    3200
    6800
    38000
     
           A公司20×2年1月1日股东权益总额为32 000万元,其中股本为20 000万元,资本公积为8 000万元,盈余公积为1 200万元,未分配利润为2 800万元;20×2年12月31日,股东权益总额为38 000万元,其中股本为20 000万元,资本公积为8 000万元,盈余公积为3 200万元,未分配利润为6 800万元。
           A公司20×2中全年实现净利润10 503万元,经公司董事会提议并经股东会批准,20×2年提取盈余公积2 000万元;向股东宣告分派现金股利4 500万元。
           本例中,A公司当年实现净利润10 500万元,经公司董事会提议并经股东会批准,20×2年提取盈余公积2 000万元,向股东宜告分派现金股利4 500万元。甲公司对A公司长期股权投资取得时的账面价值为25 600万元,20×2年12月31日仍为25 600万元,甲公司当年确认投资收益3 600万元。
           将成本法核算的结果调整为权益法核算的结果相关的调整分录如下:
           借:长期股权投资——A公司   8 400   ①
                  贷:投资收益                    8 400   
           借:投资收益                   3 600    ②
                  贷:长期股权投资——A公司        3 600   
            经过上述调整分录后,甲公司对A公司长期股权投资的账面价值为30 400万元(25 600+8 400-3 600)。甲公司对A公司长期股权投资账面价值30 400万元正好与母公司在A公司股东权益所拥有的份额相等。
          (二)合并处理
           在合并工作底稿中,按照上述权益法核算的要求,对长期股权投资的金额进行调整后,长期股权投资的金额正好反映母公司在子公司所有者权益中所拥有的份额。要编制合并财务报表,在此基础上还必须按编制合并财务报表的要求进行合并抵消处理,将母公司与子公司之间的内部交易对其个别财务报表的影响予以抵消。
           编制合并财务报表时,首先必须将母公司对子公司长期股权与子公司所有者权益中所拥有的份额予以抵消。根据母公司在子公司所有者权益中拥有份额的多少不同,可以将子公司分为全资子公司和非全资子公司。对于全资子公司,进行抵消处理时将对子公司长期股权投资的金额与子公司所有者权益全额抵消;而对于非全资子公司,则将长期股权投资与子公司所有者权益中母公司所拥有的金额进行抵消,不属于母公司的份额,即属于子公司少数股东的权益,应将其转为少数股东权益。
           接【例2】,本例经过调整后甲公司对A公司长期股权投资的金额为30 400万元;A公司股东权益总额为38 000万元,甲公司拥有80%的股权,即在子公司股东权益中拥有30 400万元;其余20%则属于少数股东权益。
           长期股权投资与子公司所有者权益抵消时、其抵消分录如下:
           借:股本                  20000     ③
                  资本公积              8000      
                  盈余公积              3200      
                 未分配利润            6800      
                贷:长期股权投资                 30400  
                       少数股东权益                 7600
            对于该笔分录,没有太大问题与争议,但是初学者也可能出现理解上的障碍,在此仍然做一个详细的分析,即为什么合并报表的第一步需要做这样一笔分录。我们通过一个简化的全资合并案例来说明为何母公司长期股权投资于子公司所有者权益需要抵消。案例如下:
           华宇公司有银行存款100万,无负债,全部为股东投入资本。2014年华宇公司出资50万,成立一家子公司华东公司,华东公司的初始资产就是50万人民币,无负债。华宇公司与华东公司的报表如下:
          华宇公司初始资产负债表:
    项目
    金额
    项目
    金额
    货币资金
    100
    负债
    0


    实收资本
    100
    合计
    100
    合计
    100
           华宇公司投资设立华东公司后资产负债表:
    项目
    金额
    项目
    金额
    货币资金
    50
    负债
    0
    长期股权投资
    50
    实收资本
    100
    合计
    100
    合计
    100
         华东公司资产负债表:
    项目
    金额
    项目
    金额
    货币资金
    50
    负债
    0


    实收资本
    50
    合计
    50
    合计
    50
            假设一年后,这两家公司没有任何经营事项,年底编制合并报表来表示整个集团的真实财务状况和经营成果,那么通过直观就可以看出,该集团货币资金仍然只有100,并没有因为设立了华东子公司就多出资产来。站在集团整体角度可以发现,华东公司的50万就是华宇公司的,而且在华宇公司的所有者权益中已经反映,只是在华宇公司的资产负债表中反映为50万长期股权投资。所以编制合并资产负债表时,集团的所有者权益仍然只有100,资产也只有100。可以通过形式与实质来进一步理解:母公司长期股权投资只是一个法律形式,表示母公司持有子公司股权多少,而起背后的实质是持有的子公司的资产(假设案例没有负债),合并资产负债表时,子公司资产已经需要合并进来了,就不需要再通过长期股权投资这个形式来表示了,而同时,由于母公司资产负债表中存在“长期股权投资”这个形式资产,相应的所有者权益中肯定也有对应的支撑反映(资产=负债+所有者权益,负债为0),也即子公司的资产有多少,对应的母公司所有者权益已经体现了,无需再通过把子公司所有者权益合并进来,如果合并进来就重复了,体现了两次(合并后结果就是集团货币资金变成150万,所有者权益变成150万),站在母公司的股东角度,其控制的经济资源仍然只有100万,合并后却变成了150万,明显出现重复。所以,编制合并报表时,母公司的形式资产长期股权投资不再需要反映,而子公司的实收资本也不再需要,都属于重复项目,二者相抵消即可。基本原理就是如此,所以在合并报表中,我们一开始需要抵消母公司长期股权投资与子公司所有者权益。
          如果存在少数股东,那就会出现差额,抵消不干净,差额部分确认为“少数股东权益”,“贷:少数股东权益”就是表示剥离子公司所有者权益中归属于少数股东的部分单独列示,以保证合并报表结平,并不是抵消的含义。我们同样可以用上面的简化案例说明:
          假设华东公司并非华宇公司全资子公司,华宇公司出资40万,东方公司出资10万成立。那么华宇公司资产负债表如下:
    项目
    金额
    项目
    金额
    货币资金
    60
    负债
    0
    长期股权投资
    40
    实收资本
    100
    合计
    100
    合计
    100
    华东公司资产负债表如下:
    项目
    金额
    项目
    金额
    货币资金
    50
    负债
    0


    实收资本
    50
    合计
    50
    合计
    50
    为了便于初学者理解,我们可以把华东公司的资产负债表改为如下结构:
    项目
    金额
    项目
    金额
    货币资金
    50
    负债
    0


    实收资本—大股东
    40


    实收资本—少数股东
    10
    合计
    50
    合计
    50
    那么同样,在编制抵消分录时,我们把母公司长期股权投资于子公司所有者权益抵消:
           借:实收资本—大股东 40
                  贷:长期股权投资 40
           可是可以发现,此时合并资产负债表中资产50万元我们就不能够全额合并进合并资产负债表了,因为大股东只占有80%股份,只能合并40万货币资金,这样站在母公司股东角度,控制的资源还是100,没有变化。那这样不是就行了,为什么会出现少数股东权益呢?这主要是理论基础不同。现行的合并报表编制,其理论基础是实体理论,要求合并报表反映整个集团的总体状况,不能只反映归属于母公司的资源有多少。我们前面只抵消40万,并只合并40货币资金进入合并报表,就只反映了母公司在集团中的份额,属于母公司理论,不符合实体理论的理念。因此,为了满足实体理论的要求,我们需要把50万货币资金都合并进入资产负债表,可是此时由于其中有10万并非大股东投入,在大股东资产负债表中有10万资产是没有所有者权益反映支撑的,最后报表会不平,怎么办?那么把差额部分剥离出来确认为少数股东权益(就是案例中的实收资本—少数股东部分的金额),这样通过在合并资产负债表中新增一个少数股东权益的项目,可以把之前母公司报表所有者权益没有反映的10万货币资金反映出来,报表结平。分录如下:
           借:实收资本—大股东 40
                  实收资本—少数股东 10
                  贷:长期股权投资 40
                        少数股东权益 10
            理解了简化案例的原理,再结合例1进行一下思考,应该就能明白为何合并财务报表需要将母公司长期股权投资与子公司所有者权益抵消,如果有少数股权,还需要剥离确认少数股权的原因了。
           当然,现行准则对于少数股东权益的剥离确认是“笼统法”,就是不再区分少数股东权益中的项目(实收资本、资本公积、未分配利润、盈余公积),而是把这些统一放入少数股东权益中,“笼统”表示,这可能是基于重要性与成本效益原则的考虑。而如果是严格区分剥离,分录应该如下:
                借:股本              20000     ③
                      资本公积          8000      
                      盈余公积          3200      
                     未分配利润        6800      
                     贷:长期股权投资               30400
                             归属于少数股东股本         4000
                             归属于少数股东资本公积     1600
                             归属于少数股东盈余公积     640
                             归属于少数股东未分配利润   1360
            是否应该搞得这么复杂另说,但是如果精确剥离确认确实应该如此反应。
            其次,编制抵消分录的第二步。将对子公司的投资收益与子公司当年利润分配相抵消,使合并财务报表反映母公司股东权益变动的情况。从单一企业来讲,当年实现的净利润加上年初未分配利润是企业利润分配的来源,企业对其进行分配,提取盈余公积、向股东分配股利以及留待以后年度的未分配利润(未分配利润可以理解为将这部分利润分配到下一会计年度)等,则是利润分配的去向。而子公司当年实现的净利润,可以分为两部分:一部分属于母公司所有,即母公司的投资收益;另一部分则属于少数股东所有,即少数股东本期收益。为了使合并财务报表反映母公司股东权益的变动情况及财务状况,则必须将母公司投资收益、少数股东收益和期初未分配利润与子公司当年利润分配以及未分配利润的金额相抵消。
           甲公司进行上述抵消处理时,其抵消分录如下:
             借:投资收益                       8400   ④
                    少数股东损益                   2100      
                   未分配利润——年初             2800      
                  贷:提取盈余公积                   2000   
                         向股东分配利润                 4500   
                         未分配利润                     6800
           对于该笔分录的分析,前面的讲解是财政部官方的解释,其核心要点是“为了使合并财务报表反映母公司股东权益的变动情况及财务状况,则必须将母公司投资收益、少数股东收益和期初未分配利润与子公司当年利润分配以及未分配利润的金额相抵消”,对于这个解释,首先从理论上讲部分正确。之所以要做该笔分录,就是为了使得合并财务报表能够合理反映母公司的股东权益变动情况以及财务状况(在扣除少数股东权益之后),但是该分录不仅仅如此,经过该分录处理,还为了能够在合并利润表中反映出归属于母公司的真实净利润情况(在扣除少数股东损益之后),而且该笔分录并非全部是“抵消”(诸多文章和教材以及准则讲解中的表述为抵消,会引起很大歧义,并让初学者不解),而是“抵消+恢复+剥离确认”。怎么理解?我们可以针对该分录中的会计科目进行逐个分拆分析。首先,该笔分录严格来说应该拆分成两个分录,一个是“抵消+恢复”,一个是“剥离确认+恢复”:
           “抵消+恢复”分录如下(记为A分录):
           借:投资收益              8400
                 未分配利润——年初    2240(2800*80%)      
                 贷:利润分配——提取盈余公积          1600(2000*80%)   
                        利润分配——向股东分配利润        3600(4500*80%)  
                       利润分配——未分配利润            5440(6800*80%)
            由于“未分配利润年初+本年利润=提取盈余公积+分配股利+未分配利润年末”,且由于子公司需要把其利润表跟母公司利润表合并,所以子公司的收入成本以及最后的净利润都会体现在合并利润表上,如果母公司再通过投资收益科目反映子公司的利润,那相当于最后的合并利润表多了8400利润,因此需要抵消重复的投资收益项目。     
           而对于子公司的利润分配项目,扣除期初的未分配利润就是子公司当年实现的利润结转进入子公司留存收益的金额(分了其中部分给股东),站在母子公司整体的角度,子公司给母公司分配股利没有实际意义,子公司无论是提取的盈余公积还是对母公司的利润分配,站在集团角度都是集团的“未分配利润”(因为对母公司的利润分配并没有流出企业集团);盈余公积是子公司作为法律主体,按照公司法要求计提的一个法律项目,并非作为一个会计主体实质发生的业务;由于母公司可以随时清算子公司,相关留存收益不论是未分配利润还是盈余公积都是归属于集团的收益,因此,将子公司提取的盈余公积和对股东的利润分配全部恢复回子公司的“利润分配——未分配利润”项目,进而可以体现整个集团的真实财务状况(即到底有多少留存收益)。所以通过“借:未分配利润——年初,贷:利润分配(提取盈余公积、向所有者分配、未分配利润)”来恢复子公司当年实现的收益(贷:利润分配表示增加利润分配),进而通过跟母公司合并资产负债表(合并未分配利润项目)来体现集团整体真实的未分配利润。
           而之所以需要恢复利润分配金额,原因还需要分开分析,一部分是由于按照“模拟权益法”,子公司年末未分配利润6800被全额抵消(其中年末未分配利润中有部分是子公司当年实现的净利润沉淀下来的:期初未分配利润是2800,当年实现净利润10500,提取盈余公积和向所有者分配6500,剩余4000沉淀在期末就是未分配利润净增加额,严格表述就是这4000的80%是归属母公司股东的,需要合并进入合并财务报表的,无需抵消),所以需要重新恢复多抵消的3200(4000*80%),通过“借:未分配利润——年初2240(2800*80%),贷:利润分配——未分配利润 5440(6800*80%)”来实现恢复。
            而另一部分是子公司当年实现的净利润结转进入“利润分配——未分配利润”后,提取了盈余公积并向股东进行了分配,而站在集团整体角度,这两个处理并没有导致集团整体“利润分配——未分配利润”减少,需要恢复回来,以真实反映集团整体的未分配利润情况,通过“贷:利润分配——提取盈余公积1600(2000*80%);贷:利润分配——向股东分配利润5440(6800*80%)”来恢复。
            其实如果对合并财务报表有一定的认识基础,也可以把该笔分录中的“借:未分配利润——年初2240(2800*80%),贷:利润分配——未分配利润 5440(6800*80%)”看做是恢复,而其他的分录都是抵消,是把母公司的投资收益与子公司的利润分配抵消。但是笔者为什么不这么分析呢,因为在模拟权益法下这个并不好理解。因为模拟权益法确认的投资收益,对应子公司并非利润分配。而在直接基于成本法编制下,抵消母公司投资收益与子公司利润分配很好理解。在成本法下,母公司在子公司分配利润时“借:应收股利,贷:投资收益”,子公司“ 借:利润分配——应付现金股利,贷:应付股利”,那么站在集团整体角度,应收应付股利不存在,减少利润分配与增加投资收益这笔交易也不应该存在,所以相互抵消。所以在成本法下把该部分理解为抵消比较好明白,但是模拟权益法却不是这么回事。所以,在此笔者并没有对其按照抵消,而是按照恢复来分析。直接基于成本法部分,可以按照抵消进行理解。
           正是由于在模拟权益法中,母公司模拟调整的投资收益与子公司的利润分配并不存在对应关系,那为什么恢复子公司利润分配和抵消母公司投资收益可以放到同一个分录中呢?并非因为二者金额刚好一致,所以正好抵消,这种说法是非常不负责任的搪塞之词,二者金额相等是外在表现形式,正是由于其背后存在一定的逻辑基础和经济实质(会计分录借贷方放到一块,一定是反映了一定的逻辑与经济实质,决不是因为二者数字相等,可以凑成分录),才导致了二者金额表现为相等,正好可以抵消。需要讲清楚其背后的逻辑,而不是像很多文章和教材中蛮不讲理的来一句“二者金额刚好相等,正好抵消”(这种做法一方面不利于讲清楚道理,一方面给初学者留下很不好的印象,觉得会计学科就是一门死搬硬套没有逻辑可讲的学科)。
          笔者在此对该问题的背后逻辑进行一个分析(为简化分析,不考虑少数股权,其实少数股东损益只是剥离确认的过程,不影响下面分析的有效性和对该问题的理解)。
          该处的投资收益是按照长期股权投资“模拟权益法”调整后反映的,母公司个别报表并没有反映该项目,而调整后投资收益反映的就是子公司净利润中归属于母公司的份额,该投资收益计入了调整后合并利润表,最后会增加合并利润表的净利润,而这部分净利润又会增加合并资产负债表的未分配利润。而由于合并报表时,子公司收入、成本费用全部合并进入了合并利润表,合并利润表就已包含了子公司净利润,不需要再通过投资收益反映,为了避免重复,我们抵消了按模拟权益法调整时确认的投资收益,而在合并利润表抵消投资收益后,集团的合并净利润虽然并没有减少(因为子公司收入成本费用直接合并进来了),但沉淀的未分配利润却减少(为什么减少下一段分析),而实质上,这个“置换”(把按模拟权益法调整的投资收益置换成子公司的利润表收入、成本费用项目来体现)只是改变了报表列报形式,不应该影响集团整体的未分配利润,所以我们需要通过恢复未分配利润的方式,把由于抵消投资收益减少的集团整体未分配利润恢复回来。
          为什么置换后集团的未分配利润会减少呢?我们需要深入分析,不能碰到复杂问题就回避或搪塞。置换前通过“投资收益”方式列报,最后计算的未分配利润包含了子公司当年净利润(母公司投资收益就是计量的子公司净利润),该未分配利润是完整的。而置换后,由于通过子公司个别报表计算的未分配利润做了内部调整与利润分配(提取了盈余公积和对所有者做了分配),再加上受到模拟权益法在分录③把子公司期末未分配利润全额抵消的影响,置换后计算的未分配利润就会较小。为什么较小呢?因为其扣除了提取的盈余公积与对所有者的分配,还被“方法性”抵消了一部分(前面分析的3200万归属于母公司的未分配利润净增加额就是不该抵消而被抵消的部分)。而“提取的盈余公积+对所有者分配+未分配利润净增加额(当年净利润扣除提取的盈余公积与对所有者的分配再减去期初未分配利润,就是当年未分配利润净增加额)=当年净利润”,而按模拟权益法调整的投资收益也是按照当年净利润来计量的,所以恢复的未分配利润其本质就是恢复子公司当年实现的净利润(净利润结转进入未分配利润),该金额与抵消的投资收益之间金额必然相等。我们需要通过图示(不考虑少数股权)来更加直观清晰的表达,文字说起来很绕(这也是模拟权益法复杂的地方)

           通过图示可以更加清晰地看到,置换前计算未分配利润考虑了子公司当年实现的净利润(通过投资收益),而置换后由于抵消了重复确认的投资收益,是通过把子公司个别利润表合并进合并利润表来计算合并利润与合并未分配利润的。可是,置换后,子公司当年实现的净利润虽然在合并利润表上被恢复了,但由于受到模拟权益法全额抵消期末未分配利润的影响,加上子公司对自己实现的净利润的内部调整和分配(提取盈余公积和向股东分配)对未分配利润的抵减,使得置换后计算的集团未分配利润金额少了,而二者的差额就是“子公司提取的盈余公积+对子公司股东的分配+按模拟权益法合并多抵消的子公司未分配利润净增加额”,而该差额其实就是子公司当年实现的净利润(前面三个项目就是净利润的三个去向),也就是按模拟权益法确认的投资收益(模拟权益法确认投资收益就是按子公司实现净利润金额计量的),二者必然相等,所以需要把母公司按模拟权益法确认的投资收益抵消,并恢复子公司相关的利润分配项目,才能既保证合并利润表净利润不重复,又保证合并资产负债未分配利润不少计。万万不是因为二者金额正好相等,所以我们正好一借一贷。
           其实,如果是基于成本法直接编制,可以不用把问题解释的如此复杂(这就是模拟权益法复杂的地方),其实子公司对于分配股利做的是“借:利润分配——应付股利,贷:应付股利”,母公司在成本法下“借:应收股利,贷:投资收益”,那么应收应付股利抵消,利润分配与投资收益抵消,都视同集团内部的交易,视同没有发生,全部抵消即可。
          前面系统分析了为何要抵消投资收益并恢复利润分配,在分析时为了便于理解没有考虑少数股东的存在,那么该例题中是存在少数股权的,那么子公司当年的净利润中有部分就应该归属于少数股东损益,下面系统分析剥离确认少数股东损益的分录:
         “剥离确认+恢复”分录如下(记为B分录):
          借:少数股东损益           2100
                 未分配利润——年初     560(2800*20%)
                 贷:利润分配——提取盈余公积     400(2000*20%)   
                       利润分配——向股东分配利润   900(4500*20%)  
                       利润分配——未分配利润       1360(6800*20%)
            对该笔B分录,对其的理解不能是抵消分录,该笔分录跟抵消没有丝毫关系。首先,“借:少数股东损益”表示的并非抵消少数股东损益的含义,而是剥离确认子公司当年实现的净利润中归属于少数股东的部分,该项目会在合并利润表中体现为少数股东损益的增加,即在合并利润表中剥离归属于少数股东的利润单独列示(具体可以见合并工作底稿)。同时,如前面分析,贷方恢复的利润分配和借方的未分配利润综合起来就是表示子公司本年的净利润,乘以20%就是少数股东享有的份额。当然此处的贷方不能完全作此理解,之所以还要恢复未分配利润中归属于少数股东的部分是基于该种处理思路的要求。按照此种处理思路,需要对子公司实现的净利润全额恢复进入未分配利润(其理论基础实体理论,也就是子公司的净利润只要没有对外部分配,无论怎样处置最后都在集团内),然后对于归属于少数股东的部分进行扣除,所以最后又扣除2100的未分配利润,剩余就是归属于母公司的未分配利润(可以见合并底稿最后计算未分配利润的过程)。但是其实归属于少数股东的并非2100的未分配利润,其中有900已经分配给少数股东,流出了企业集团。按此思路是为了计算归属于母公司的未分配利润,则先假设归属于少数股东的当年收益都还在集团内,算出子公司整体的未分配利润,扣除少数股东的就是母公司的。至于扣除的2100中有多少流出了集团,那是计算少数股东权益时需要考虑的,并不影响计算归属于母公司未分配利润的准确性。计算少数股东权益是在分录③按照年末时点数直接计算的,那时的子公司所有者权益数已经是分配给股东利润之后的时点数值,所以计算的少数股东权益仍然是准确的。可以验证:少数股东权益初始时6400,当年归属于少数股东损益2100,那么假设不存在分配股利,少数股东权益应该为8500,但是由于分配了900,所以年末少数股东权益应该扣除900,只剩7600。与分录③利用时点数据剥离确认的少数股东权益一致(在下面成本法直接编制方法下,就会看到需要考虑利润分配对少数股东权益的影响,需要冲减。模拟权益法由于其数值已经是根据分配后的时点数值计算的,所以无需重复冲减)。
           很多人有疑惑,剥离确认少数股东损益其实是少数股东损益增加,应该在贷方才对,但是这里却在借方。所以要说明,此处不能用“损益类”科目贷方表示增加,借方表示减少来理解,如果一定要套用此规则,那分录形式就需要变更为“借:子公司净利润,贷:少数股东损益”(也是剥离确认的意思),此时是符合借贷记账法原理的。但是需要注意,这样处理的思路就跟官方有差异了(也是可以的,并没有错),由于通过此分录剥离少数股东损益,并没有全额恢复子公司利润分配项目,只恢复了归属于大股东的部分(通过前面A分录恢复的),那么在合并工作底稿中计算未分配利润时就需要注意,不能扣除由于存在少数股东损益而增加的未分配利润(因为计算的未分配利润中一开始就没有包含少数股东该享有的部分),那么最后未分配利润的计算过程就变成了18000+6800-3600+8400-8400-2240-6800+1600+3600+5440=22800,无须再扣除由于确认少数股东损益全额恢复未分配利润而增加的未分配利润中归属于少数股东的部分,最终结果一致。此种计算方法就无需先假定子公司当年收益都还在集团内部。笔者个人更倾向于此种做法,一来保持借贷记账法基本原理不变,二来无需进行一个虚拟假设,增加问题理解难度。
           当然,由于款项尚未支付,A公司已将其计列应付股利4 500万元。甲公司根据A公司宣告的分派现金股利的公告,按照其所享有的金额,已确认应收股利,并在其资产负债表中计列应收股利3 600万元。这属于母公司与子公司之间的债权债务,在编制合并财务报表时必须将期予以抵消,其抵消分录如下:
             借:应付股利            3 600      ⑤
                     贷:应收股利            3 600   
            根据上述调整分录①和②和抵消分录③至⑤,编制合并工作底稿如表25-5所示。
    表5                    模拟权益法下合并工作底稿
    20×2年度                        单位:万元
    项    目
    母公司
    子公司
    合计数
    调整分录
    抵消分录
    少数股东权益
    合并数
    借方
    贷方
    借方
    贷方
    流动资产:









    货币资金
    5700
    6500
    12200





    12200
    交易性金融资产
    3000
    5000
    8000





    8000
    应收票据
    7200
    3600
    10800





    10800
    应收账款
    8500
    5100
    13600





    13600
    预付款项
    1500
    2500
    4000





    4000
    应收股利
    4800
    0
    4800



    3600⑤

    1200
    其他应收款
    500
    1300
    1800





    1800
    存货
    37000
    18000
    55000





    55000
    其他流动资产
    1800
    1000
    2800





    2800
    流动资产合计
    70000
    43000
    113000



    3600

    109400
    项    目
    母公司
    子公司
    合计数
    调整分录
    抵消分录
    少数股东权益
    合并数
    借方
    贷方
    借方
    贷方
    非流动资产:









    可供出售金融资产
    8000
    0
    8000





    8000
    持有至到期投资
    13000
    4000
    17000





    17000
    长期股权投资
    40000
    0
    40000
    8400①
    3600②

    30400③

    14400
    固定资产原价
    28000
    26000
    54000





    54000
    在建工程
    13000
    4200
    17200





    17200
    无形资产
    6000
    1800
    7800





    7800
    商誉
    2000
    0
    2000





    2000
    其他非流动资产
    0
    0
    0





    0
    非流动资产合计
    110000
    36000
    146000
    8400
    3600

    30400

    120400
    资产总计
    180000
    79000
    259000
    8400
    3600

    3400

    229800
    流动负债:









    短期借款
    10000
    4800
    14800





    14800
    项    目
    母公司
    子公司
    合计数
    调整分录
    抵消分录
    少数股东权益
    合并数
    借方
    贷方
    借方
    贷方
    交易性金融负债
    4000
    2400
    6400





    6400
    应付票据
    13000
    3600
    16600





    16600
    应付账款
    18000
    5200
    23200





    23200
    预收款项
    4000
    3900
    7900





    7900
    应付职工薪酬
    5000
    1600
    6600





    6600
    应交税费
    2700
    1400
    4100





    4100
    应付股利
    5000
    4500
    9500


    3600⑤


    5900
    其他应付款
    300
    700
    1000





    1000
    其他流动负债
    2000
    900
    2900





    2900
    流动负债合计
    64000
    29000
    93000


    3600


    89400
    非流动负债:









    长期借款
    4000
    5000
    9000





    9000
    应付债券
    20000
    7000
    27000





    27000
    长期应付款
    6000
    0
    6000





    6000
    其他非流动负债
    0
    0
    0





    0
    项    目
    母公司
    子公司
    合计数
    调整分录
    抵消分录
    少数股东权益
    合并数
    借方
    贷方
    借方
    贷方
    非流动负债合计
    30000
    12000
    42000





    42000
    负债合计
    94000
    41000
    135000


    3600


    131400
    股东权益:









    股本
    40000
    20000
    60000


    20000③


    40000
    资本公积
    10000
    8000
    18000


    8000③


    10000
    盈余公积
    18000
    3200
    21200


    3200③


    18000
    未分配利润(见本表最后)









    股东权益合计
    86000
    38000
    124000


    41600


    90800
    少数股东权益







    7600③
    7600
    负债和股东权益总计
    180000
    79000
    259000





    229800
    利润表









    一、营业收入
    150000
    94800
    244800





    244800
    减:营业成本
    96000
    73000
    169000





    169000
    项    目
    母公司
    子公司
    合计数
    调整分录
    抵消分录
    少数股东权益
    合并数
    借方
    贷方
    借方
    贷方
    营业税金及附加
    1800
    1000
    2800





    2800
    销售费用
    5200
    3400
    8600





    8600
    管理费用
    6000
    3900
    9900





    9900
    财务费用
    1200
    800
    2000





    2000
    资产减值损失
    600
    300
    900





    900
    加:公允价值变动收益
    0
    0
    0





    0
    投资收益
    9800
    200
    10000
    3600②
    8400①
    8400④


    6400
    二、营业利润
    49000
    12600
    61600
    3600
    8400
    8400


    58000
    加:营业外收入
    1600
    2400
    4000





    4000
    减:营业外支出
    2600
    1000
    3600





    3600
    三、利润总额
    48000
    14000
    62000
    3600
    8400
    8400


    58400
    减:所得税费用
    12000
    3500
    15500





    15500
    四、净利润
    36000
    10500
    46500
    3600
    8400
    8400


    42900
    少数股东损益







     2100④
    2100
    项    目
    母公司
    子公司
    合计数
    调整分录
    抵消分录
    少数股东权益
    合并数
    借方
    贷方
    借方
    贷方
    归属于母公司股东损益








    40800
    一、年初未分配利润
    9000
    2800
    11800


    2800④


    9000
    二、本年增减变动金额









    三、利润分配









    1.提取盈余公积
    7000
    2000
    9000



    2000④

    7000
    2.对股东的分配
    20000
    4500
    24500



    4500④

    20000
    四、年末未分配利润
    18000
    6800
    24800
    3600
    8400
    6800③
    18000
    6800④13300
     2100
    22800*
    *22800=24800+(8400-3600)+(13300-18000)-2100
              (二)直接基于成本法编制合并日后相关分录
              直接基于成本法编制合并日后相关分录时,第一步无需先按照模拟权益法对母公司的长期股权投资进行任何调整,母公司按照成本法在其个别报表上是如何处理就保留该处理。由于成本法下,母公司的长期股权投资并没有根据子公司实现的净利润调整账面价值,子公司分配利润母公司的处理为“借:应收股利,贷:投资收益”,所以抵消母公司长期股权投资与子公司所有者权益时,不能按照模拟权益法的逻辑,去抵消年末的数值,因为母公司长期股权投资账面价值还是期初数值,抵消是抵不平的。因此,成本法下的该抵消分录是抵消长期股权投资账面价值与子公司合并日的所有者权益,这二者肯定是一致。
             借:股本       20000    ①
                    资本公积   8000   
                      盈余公积   1200   
                     未分配利润 2800   
                       贷:长期股权投资   25600
                              少数股东权益   6400
             其次,如前所述,由于母公司一开始就没有确认子公司当年实现的净利润对长期股权投资的影响,因此成本法下编制就不存在抵消的问题。在模拟权益法下是先模拟确认投资收益,调增长期股权投资账面价值,再抵消。成本法则无需如此折腾了,因为初始就没有确认。
           同时我们需要剥离出子公司当年实现的净利润中归属于少数股东的部分,并确认当年实现的净利润增加的少数股东权益(进入了留存收益)
        借:少数股东损益10500*0.2=2100   ②
               贷:少数股东权益10500*0.2=2100
           此处“借:少数股东损益”也是从子公司利润中剥离归属于少数股东部分列示的意思,并不是抵消的含义。“贷:少数股东权益”也是增加当期的少数股东权益的意思,也不是抵消。通过此分录,就把从子公司当年的盈利与所有者权益中剥离了归属于少数股东的部分,那剩下的自然就是归属于母公司的,直接合并即可,不存在其他抵消。
           当然,如前所述,子公司计提盈余公积站在集团财务角度并没有意义,相对于集团来说仍然体现为未分配利润,所以把子公司计提的盈余公积抵消,恢复未分配利润数额。这样才能真实反映集团整体的未分配利润。
         借:盈余公积 2000          ③
               贷:利润分配——提取盈余公积 2000
           最后抵消母公司投资收益与子公司利润分配,总体分录如下:
          借:投资收益3600   ④
               少数股东权益900
               贷:利润分配——向股东分配 4500
           对于该笔分录可以拆分成两笔,第一笔是抵消恢复分录:
           借:投资收益3600  
               贷:利润分配——向股东分配 3600
           如前分析,成本法下,母公司投资收益与子公司利润分配存在对应关系,母公司在子公司分配利润时“借:应收股利,贷:投资收益”,子公司“ 借:利润分配——应付现金股利,贷:应付股利”,那么站在集团整体角度,应收应付股利不存在,减少利润分配与增加投资收益这笔交易也不应该存在,所以要相互抵消。
           当然也可以按照前面分析的“置换”思路进行更加本质性的思考。由于当时母公司对于子公司实现的利润确认了投资收益,最后进入了未分配利润,增加了集团整体的未分配利润。而由于子公司的收入、成本费用最后都已经在合并利润表上反应了,再保留母公司投资收益就重复了,因此将其抵消。而抵消投资收益后集团的未分配利润计算就少了部分,因为子公司单体利润表合并进来后,子公司对当年利润有处置行为(包括提取盈余公积和分配股利),所以如前面的分析逻辑,根据子公司利润表计算的合并未分配利润就会少一部分,那么就要把其恢复回来,增加集团的未分配利润。
           第二笔是确认子公司分配股利对少数股东权益的影响。
          借:少数股东权益900
               贷:利润分配——向股东分配 900
           此处这种处理也是一种“假设性处理”(合并报表中为了计算某个项目数值,经常会进行假设),是为了正确计算集团整体的未分配利润而为之的。在集团整体而言,当年的留存收益有900被少数股东分配走了,少数股东权益应该减少,同时集团整体的留存收益也会减少,归属于母公司的自然也会减少。这里通过该分录,先恢复被少数股东分配走的利润(相当于假定没有分配),这样体现出来的未分配利润就是分配以前的整个集团的未分配利润,然后用该整体未分配利润扣除少数股东享有的2100(这2100中有部分留在集团,有900被分走。由于初始按照子公司当年实现的净利润中归属于少数股东的部分增加了少数股东权益,而净利润中留在集团的部分仍然保持在少数股东权益中,净利润中被少数股东分配的部分就要抵减少数股东权益。但是这个属于少数股东对于其享有份额的内部划分,即哪些留在集团,哪些被拿走,不影响计算母公司的未分配利润),剩下的就是归属于母公司的。为什么要计算出归属于母公司的未分配利润呢?因为合并资产负债表中未分配利润反映的就是归属于母公司的部分,归属于少数股东的部分在少数股东权益中“笼统”反映了,没有分“实收资本”、“未分配利润”以及“盈余公积”等分别列示。正是由于合并资产负债表中的少数股东权益已经包含了集团未分配利润中少数股东享有的部分,所以合并资产负债表中的未分配利润要列示归属于母公司的部分。
           如前所述,我们也可以不这么绕,不做假定性分析。同时按照借贷记账基本原理处理。那么首先:
           借:子公司当年净利润    2100
                  贷:少数股东损益         2100
           确认合并利润表中少数股东损益的金额。
           然后恢复子公司利润分配(站在集团角度等于没有分配),此时恢复时就考虑少数股东分走的部分,少数股东分走了股利,流出了集团,所以不能再把其恢复回集团的整体未分配利润,为了看得更加清楚,首先恢复利润分配中分配给母公司的,该部分归属于母公司股东,跟少数股东无关,少数股东在该部分中不享有份额(其享有的900已经被分走,不在集团内部,所以这里不进行恢复):
           借:利润分配——对股东分配(只考虑对母公司)  3600
                  贷:利润分配——未分配利润(集团)          3600
           再把子公司当年净利润中其他部分转入集团的未分配利润:
    借:利润分配——提取盈余公积 2000
                  利润分配——未分配利润  4000
                  贷:利润分配——未分配利润(集团) 6000
           这6000中有20%归属于少数股东,再剥离确认归属于少数股东权益的部分           
           借:未分配利润(集团) 1200
                  贷:少数股东权益     1200
           最后计算的少数股东权益结果都是7600,保持一致。
           最后抵消应收应付股利:
           借:应付股利  3600     ⑤
                  贷:应收股利   3600
           通过合并工作底稿反映如下,可以发现,结果跟模拟权益法完全一致:
    表6                      直接基于成本法下合并工作底稿
    20×2年度                     单位:万元
    项    目
    母公司
    子公司
    合计数
    调整分录
    抵消分录
    少数股东权益
    合并数
    借方
    贷方
    借方
    贷方
    流动资产:









    货币资金
    5700
    6500
    12200





    12200
    项    目
    母公司
    子公司
    合计数
    调整分录
    抵消分录
    少数股东权益
    合并数
    借方
    贷方
    借方
    贷方
    交易性金融资产
    3000
    5000
    8000





    8000
    应收票据
    7200
    3600
    10800





    10800
    应收账款
    8500
    5100
    13600





    13600
    预付款项
    1500
    2500
    4000





    4000
    应收股利
    4800
    0
    4800



    3600⑤

    1200
    其他应收款
    500
    1300
    1800





    1800
    存货
    37000
    18000
    55000





    55000
    其他流动资产
    1800
    1000
    2800





    2800
    流动资产合计
    70000
    43000
    113000



    3600

    109400
    非流动资产:









    可供出售金融资产
    8000
    0
    8000





    8000
    持有至到期投资
    13000
    4000
    17000





    17000
    长期股权投资
    40000
    0
    40000



    25600①

    14400
    固定资产原价
    28000
    26000
    54000





    54000
    在建工程
    13000
    4200
    17200





    17200
    无形资产
    6000
    1800
    7800





    7800
    商誉
    2000
    0
    2000





    2000
    其他非流动资产
    0
    0
    0





    0
    项    目
    母公司
    子公司
    合计数
    调整分录
    抵消分录
    少数股东权益
    合并数
    借方
    贷方
    借方
    贷方
    非流动资产合计
    110000
    36000
    146000



    25600

    120400
    资产总计
    180000
    79000
    259000



    25600

    229800
    流动负债:









    短期借款
    10000
    4800
    14800





    14800
    交易性金融负债
    4000
    2400
    6400





    6400
    应付票据
    13000
    3600
    16600





    16600
    应付账款
    18000
    5200
    23200





    23200
    预收款项
    4000
    3900
    7900





    7900
    应付职工薪酬
    5000
    1600
    6600





    6600
    应交税费
    2700
    1400
    4100





    4100
    应付股利
    5000
    4500
    9500


    3600⑤


    5900
    其他应付款
    300
    700
    1000





    1000
    其他流动负债
    2000
    900
    2900





    2900
    流动负债合计
    64000
    29000
    93000


    3600


    89400
    非流动负债:









    长期借款
    4000
    5000
    9000





    9000
    应付债券
    20000
    7000
    27000





    27000
    长期应付款
    6000
    0
    6000





    6000
    项    目
    母公司
    子公司
    合计数
    调整分录
    抵消分录
    少数股东权益
    合并数
    借方
    贷方
    借方
    贷方
    其他非流动负债
    0
    0
    0





    0
    非流动负债合计
    30000
    12000
    42000





    42000
    负债合计
    94000
    41000
    135000


    3600


    131400
    股东权益:









    股本
    40000
    20000
    60000


    20000①


    40000
    资本公积
    10000
    8000
    18000


    8000①


    10000
    盈余公积
    18000
    3200
    21200


    1200①


    18000
    未分配利润(见本表最后)









    股东权益合计
    86000
    38000
    124000


    41600


    90800
    少数股东权益







    6400①
    2100②
    -900④
    7600
    负债和股东权益总计
    180000
    79000
    259000





    229800
    利润表









    一、营业收入
    150000
    94800
    244800





    244800
    减:营业成本
    96000
    73000
    169000





    169000
    营业税金及附加
    1800
    1000
    2800





    2800
    销售费用
    5200
    3400
    8600





    8600
    管理费用
    6000
    3900
    9900





    9900
    项    目
    母公司
    子公司
    合计数
    调整分录
    抵消分录
    少数股东权益
    合并数
    借方
    贷方
    借方
    贷方


    财务费用
    1200
    800
    2000





    2000
    资产减值损失
    600
    300
    900





    900
    加:公允价值变动收益
    0
    0
    0





    0
    投资收益
    9800
    200
    10000
    3600④




    6400
    二、营业利润
    49000
    12600
    61600
    3600




    58000
    加:营业外收入
    1600
    2400
    4000





    4000
    减:营业外支出
    2600
    1000
    3600





    3600
    三、利润总额
    48000
    14000
    62000
    3600




    58400
    减:所得税费用
    12000
    3500
    15500





    15500
    四、净利润
    36000
    10500
    46500
    3600




    42900
    少数股东损益







    2100②
    2100
    归属于母公司股东损益








    40800
    一、年初未分配利润
    9000
    2800
    11800

    2800①



    9000
    二、本年增减变动金额









    三、利润分配









    1.提取盈余公积
    7000
    2000
    9000


    2000③


    7000
    2.对股东的分配
    20000
    4500
    24500


    4500③


    20000
    项    目
    母公司
    子公司
    合计数
    调整分录
    抵消分录
    少数股东权益
    合并数
    借方
    贷方
    借方
    贷方
    四、年末未分配利润
    18000
    6800
    24800
    3600
    2800
    6500

    2100
    22800*
    注:22800*=24800-3600-2800+6500-2100
    展开全文
  • MySQL数据库优化的八种方式(经典必看)

    万次阅读 多人点赞 2019-03-13 15:48:28
    MySQL数据库优化的八种方式(经典必看) 引言: 关于数据库优化,网上有不少资料和方法,但是不少质量参差不齐,有些总结的不够到位,内容冗杂 偶尔发现了这篇文章,总结得很经典,文章流量也很大,所以拿...

    MySQL数据库优化的八种方式(经典必看)

    引言:

     
    1. 关于数据库优化,网上有不少资料和方法,但是不少质量参差不齐,有些总结的不够到位,内容冗杂

    2. 偶尔发现了这篇文章,总结得很经典,文章流量也很大,所以拿到自己的总结文集中,积累优质文章,提升个人能力,希望对大家今后开发中也有帮助

    1、选取最适用的字段属性

    MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。

    例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了。同样的,如果可以的话,我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。

    另外一个提高效率的方法是在可能的情况下,应该尽量把字段设置为NOTNULL,这样在将来执行查询的时候,数据库不用去比较NULL值。
    对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能。

    2、使用连接(JOIN)来代替子查询(Sub-Queries)

    MySQL从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给主查询,如下所示:

    DELETE  FROM  customerinfo
    
    WHERE  CustomerID  NOT  in  (SELECT customerid  FROM  salesinfo)
    

     

    使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且写起来也很容易。但是,有些情况下,子查询可以被更有效率的连接(JOIN)..替代。例如,假设我们要将所有没有订单记录的用户取出来,可以用下面这个查询完成:

    SELECT  *  FROM  customerinfo
    
    WHERE  customerid  NOT IN (SELECT customerid   FROM   salesinfo)
    

     

    如果使用连接(JOIN)..来完成这个查询工作,速度将会快很多。尤其是当salesinfo表中对CustomerID建有索引的话,性能将会更好,查询如下:

    SELECT  *  FROM  customerinfo
    
    LEFT  JOIN  salesinfo  ON   customerinfo.customerid =salesinfo.customerid
    
    WHERE  salesinfo.customerid   IS NULL
    

     

    连接(JOIN)..之所以更有效率一些,是因为MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。

    3、使用联合(UNION)来代替手动创建的临时表

    MySQL从4.0的版本开始支持union查询,它可以把需要使用临时表的两条或更多的select查询合并的一个查询中。在客户端的查询会话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效。使用union来创建查询的时候,我们只需要用UNION作为关键字把多个select语句连接起来就可以了,要注意的是所有select语句中的字段数目要想同。下面的例子就演示了一个使用UNION的查询。

    SELECT   name,phone  FROM  client UNION
    
    SELECT  name,birthdate  FROM  author  UNION
    
    SELECT  name,supplier FROM product
    

     

    4、事务

    尽管我们可以使用子查询(Sub-Queries)、连接(JOIN)和联合(UNION)来创建各种各样的查询,但不是所有的数据库操作都可以只用一条或少数几条SQL语句就可以完成的。更多的时候是需要用到一系列的语句来完成某种工作。但是在这种情况下,当这个语句块中的某一条语句运行出错的时候,整个语句块的操作就会变得不确定起来。设想一下,要把某个数据同时插入两个相关联的表中,可能会出现这样的情况:第一个表中成功更新后,数据库突然出现意外状况,造成第二个表中的操作没有完成,这样,就会造成数据的不完整,甚至会破坏数据库中的数据。要避免这种情况,就应该使用事务,它的作用是:要么语句块中每条语句都操作成功,要么都失败。换句话说,就是可以保持数据库中数据的一致性和完整性。事物以BEGIN关键字开始,COMMIT关键字结束。在这之间的一条SQL操作失败,那么,ROLLBACK命令就可以把数据库恢复到BEGIN开始之前的状态。

    BEGIN;
      INSERT   INTO   salesinfo   SET   customerid=14;
      UPDATE   inventory   SET   quantity =11   WHERE   item='book';
    COMMIT;
    

    事务的另一个重要作用是当多个用户同时使用相同的数据源时,它可以利用锁定数据库的方法来为用户提供一种安全的访问方式,这样可以保证用户的操作不被其它的用户所干扰。

    5、锁定表

    尽管事务是维护数据库完整性的一个非常好的方法,但却因为它的独占性,有时会影响数据库的性能,尤其是在很大的应用系统中。由于在事务执行的过程中,数据库将会被锁定,因此其它的用户请求只能暂时等待直到该事务结束。如果一个数据库系统只有少数几个用户来使用,事务造成的影响不会成为一个太大的问题;但假设有成千上万的用户同时访问一个数据库系统,例如访问一个电子商务网站,就会产生比较严重的响应延迟。

    其实,有些情况下我们可以通过锁定表的方法来获得更好的性能。下面的例子就用锁定表的方法来完成前面一个例子中事务的功能。

    LOCK TABLE inventory WRITE SELECT quantity  FROM   inventory   WHERE Item='book';
    
    ...
    
    UPDATE   inventory   SET   Quantity=11   WHERE  Item='book';UNLOCKTABLES
    

     

    这里,我们用一个select语句取出初始数据,通过一些计算,用update语句将新值更新到表中。包含有WRITE关键字的LOCKTABLE语句可以保证在UNLOCKTABLES命令被执行之前,不会有其它的访问来对inventory进行插入、更新或者删除的操作。

    6、使用外键

    锁定表的方法可以维护数据的完整性,但是它却不能保证数据的关联性。这个时候我们就可以使用外键。

    例如,外键可以保证每一条销售记录都指向某一个存在的客户。在这里,外键可以把customerinfo表中的CustomerID映射到salesinfo表中CustomerID,任何一条没有合法CustomerID的记录都不会被更新或插入到salesinfo中。

    CREATE  TABLE   customerinfo( customerid   int primary key) engine = innodb;
    
    CREATE  TABLE   salesinfo( salesid int not null,
    customerid  int not null, 
    primary key(customerid,salesid),
    foreign key(customerid)  
    references  customerinfo(customerid) on delete cascade)engine = innodb;
    
    

     

    注意例子中的参数“ON DELETE CASCADE”。该参数保证当customerinfo表中的一条客户记录被删除的时候,salesinfo表中所有与该客户相关的记录也会被自动删除。如果要在MySQL中使用外键,一定要记住在创建表的时候将表的类型定义为事务安全表InnoDB类型。该类型不是MySQL表的默认类型。定义的方法是在CREATETABLE语句中加上TYPE=INNODB。如例中所示。

    7、使用索引

    索引是提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快得多的速度检索特定的行,尤其是在查询语句当中包含有MAX(),MIN()和ORDERBY这些命令的时候,性能提高更为明显。

    那该对哪些字段建立索引呢?

    一般说来,索引应建立在那些将用于JOIN,WHERE判断和ORDERBY排序的字段上。尽量不要对数据库中某个含有大量重复的值的字段建立索引。对于一个ENUM类型的字段来说,出现大量重复值是很有可能的情况

    例如customerinfo中的“province”..字段,在这样的字段上建立索引将不会有什么帮助;相反,还有可能降低数据库的性能。我们在创建表的时候可以同时创建合适的索引,也可以使用ALTERTABLE或CREATEINDEX在以后创建索引。此外,MySQL从版本3.23.23开始支持全文索引和搜索。全文索引在MySQL中是一个FULLTEXT类型索引,但仅能用于MyISAM类型的表。对于一个大的数据库,将数据装载到一个没有FULLTEXT索引的表中,然后再使用ALTERTABLE或CREATEINDEX创建索引,将是非常快的。但如果将数据装载到一个已经有FULLTEXT索引的表中,执行过程将会非常慢。

    8、优化的查询语句

    绝大多数情况下,使用索引可以提高查询的速度,但如果SQL语句使用不恰当的话,索引将无法发挥它应有的作用。

    下面是应该注意的几个方面。

    • 首先,最好是在相同类型的字段间进行比较的操作。

      在MySQL3.23版之前,这甚至是一个必须的条件。例如不能将一个建有索引的INT字段和BIGINT字段进行比较;但是作为特殊的情况,在CHAR类型的字段和VARCHAR类型字段的字段大小相同的时候,可以将它们进行比较。

    • 其次,在建有索引的字段上尽量不要使用函数进行操作。

    例如,在一个DATE类型的字段上使用YEAE()函数时,将会使索引不能发挥应有的作用。所以,下面的两个查询虽然返回的结果一样,但后者要比前者快得多。

    • 第三,在搜索字符型字段时,我们有时会使用LIKE关键字和通配符,这种做法虽然简单,但却也是以牺牲系统性能为代价的。

    例如下面的查询将会比较表中的每一条记录。

    
    SELECT  *  FROM  books  WHERE  name  like   "MySQL%"

    但是如果换用下面的查询,返回的结果一样,但速度就要快上很多:

    SELECT  *  FROM  books  WHERE  name >=  "MySQL"  and  name  <"MySQM"

     

    最后,应该注意避免在查询中让MySQL进行自动类型转换,因为转换过程也会使索引变得不起作用。

    优化Mysql数据库的8个方法

    本文通过8个方法优化Mysql数据库:创建索引、复合索引、索引不会包含有NULL值的列、使用短索引、排序的索引问题、like语句操作、不要在列上进行运算、不使用NOT IN和<>操作

    1、创建索引
    对于查询占主要的应用来说,索引显得尤为重要。很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致。如果不加索引的话,那么查找任何哪怕只是一条特定的数据都会进行一次全表扫描,如果一张表的数据量很大而符合条件的结果又很少,那么不加索引会引起致命的性能下降。但是也不是什么情况都非得建索引不可,比如性别可能就只有两个值,建索引不仅没什么优势,还会影响到更新速度,这被称为过度索引。
    2、复合索引
    比如有一条语句是这样的:select * from users where area='beijing' and age=22;
    如果我们是在area和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效率,但是如果在area、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(area, age, salary)的复合索引,那么其实相当于创建了(area,age,salary)、(area,age)、(area)三个索引,这被称为最佳左前缀特性。因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。
    3、索引不会包含有NULL值的列
    只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。
    4、使用短索引
    对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的 列,如果在前10 个或20 个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。
    5、排序的索引问题
    mysql查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。
    6、like语句操作
    一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。
    7、不要在列上进行运算
    select * from users where YEAR(adddate)<2007;
    将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成
    select * from users where adddate<‘2007-01-01';
    8、不使用NOT IN和<>操作
    NOT IN和<>操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替,id<>3则可使用id>3 or id<3来代替。

    数据库SQL优化大总结之 百万级数据库优化方案

    网上关于SQL优化的教程很多,但是比较杂乱。近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充。

    这篇文章我花费了大量的时间查找资料、修改、排版,希望大家阅读之后,感觉好的话推荐给更多的人,让更多的人看到、纠正以及补充。

    1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。


    2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:

    select id from t where num is null

    最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库.

    备注、描述、评论之类的可以设置为 NULL,其他的,最好不要使用NULL。

    不要以为 NULL 不需要空间,比如:char(100) 型,在字段建立时,空间就固定了, 不管是否插入值(NULL也包含在内),都是占用 100个字符的空间的,如果是varchar这样的变长字段, null 不占用空间。


    可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

    select id from t where num = 0


    3.应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。

    4.应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描,如:

    select id from t where num=10 or Name = 'admin'

    可以这样查询:

    select id from t where num = 10
    union all
    select id from t where Name = 'admin'


    5.in 和 not in 也要慎用,否则会导致全表扫描,如:

    select id from t where num in(1,2,3)

    对于连续的数值,能用 between 就不要用 in 了:

    select id from t where num between 1 and 3

    很多时候用 exists 代替 in 是一个好的选择:

    select num from a where num in(select num from b)

    用下面的语句替换:

    select num from a where exists(select 1 from b where num=a.num)

    6.下面的查询也将导致全表扫描:

    select id from t where name like ‘%abc%’

    若要提高效率,可以考虑全文检索。

    7.如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然 而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:

    select id from t where num = @num

    可以改为强制查询使用索引:

    select id from t with(index(索引名)) where num = @num

    .应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:

    select id from t where num/2 = 100

    应改为:

    select id from t where num = 100*2


    9.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:

    select id from t where substring(name,1,3) = ’abc’       -–name以abc开头的id
    select id from t where datediff(day,createdate,’2005-11-30′) = 0    -–‘2005-11-30’    --生成的id

    应改为:

    select id from t where name like 'abc%'
    select id from t where createdate >= '2005-11-30' and createdate < '2005-12-1'


    10.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

    11.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。

    12.不要写一些没有意义的查询,如需要生成一个空表结构:

    select col1,col2 into #t from t where 1=0

    这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:
    create table #t(…)

    13.Update 语句,如果只更改1、2个字段,不要Update全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志。

    14.对于多张大数据量(这里几百条就算大了)的表JOIN,要先分页再JOIN,否则逻辑读会很高,性能很差。

    15.select count(*) from table;这样不带任何条件的count会引起全表扫描,并且没有任何业务意义,是一定要杜绝的。


    16.索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有 必要。

    17.应尽可能的避免更新 clustered 索引数据列,因为 clustered 索引数据列的顺序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源。若应用系统需要频繁更新 clustered 索引数据列,那么需要考虑是否应将该索引建为 clustered 索引。

    18.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连 接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

    19.尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

    20.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

    21.尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。

    22. 避免频繁创建和删除临时表,以减少系统表资源的消耗。临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件, 最好使用导出表。

    23.在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。

    24.如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。

    25.尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。

    26.使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。

    27.与临时表一样,游标并不是不可使用。对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括“合计”的例程通常要比使用游标执行的速度快。如果开发时 间允许,基于游标的方法和基于集的方法都可以尝试一下,看哪一种方法的效果更好。

    28.在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。

    29.尽量避免大事务操作,提高系统并发能力。

    30.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。

    实际案例分析:拆分大的 DELETE 或INSERT 语句,批量提交SQL语句
      如果你需要在一个在线的网站上去执行一个大的 DELETE 或 INSERT 查询,你需要非常小心,要避免你的操作让你的整个网站停止相应。因为这两个操作是会锁表的,表一锁住了,别的操作都进不来了。
      Apache 会有很多的子进程或线程。所以,其工作起来相当有效率,而我们的服务器也不希望有太多的子进程,线程和数据库链接,这是极大的占服务器资源的事情,尤其是内存。
      如果你把你的表锁上一段时间,比如30秒钟,那么对于一个有很高访问量的站点来说,这30秒所积累的访问进程/线程,数据库链接,打开的文件数,可能不仅仅会让你的WEB服务崩溃,还可能会让你的整台服务器马上挂了。
      所以,如果你有一个大的处理,你一定把其拆分,使用 LIMIT oracle(rownum),sqlserver(top)条件是一个好的方法。下面是一个mysql示例:

    while(1){
    
       //每次只做1000条
    
       mysql_query(“delete from logs where log_date <= ’2012-11-01’ limit 1000”);
    
       if(mysql_affected_rows() == 0){
    
         //删除完成,退出!
         break;
      }
    
    //每次暂停一段时间,释放表让其他进程/线程访问。
    usleep(50000)
    
    }

    好了,到这里就写完了。我知道还有很多没有写到的,还请大家补充。后面有空会介绍一些SQL优化工具给大家。让我们一起学习,一起进步吧!

    运维角度浅谈MySQL数据库优化

     一个成熟的数据库架构并不是一开始设计就具备高可用、高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善。这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分为以下五个阶段:

    1、数据库表设计

      项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分就是对表结构设计。对于数据库来说,这点很重要,如果设计不当,会直接影响访问速度和用户体验。影响的因素很多,比如慢查询、低效的查询语句、没有适当建立索引、数据库堵塞(死锁)等。当然,有测试工程师的团队,会做压力测试,找bug。对于没有测试工程师的团队来说,大多数开发工程师初期不会太多考虑数据库设计是否合理,而是尽快完成功能实现和交付,等项目有一定访问量后,隐藏的问题就会暴露,这时再去修改就不是这么容易的事了。

    2、数据库部署

      该运维工程师出场了,项目初期访问量不会很大,所以单台部署足以应对在1500左右的QPS(每秒查询率)。考虑到高可用性,可采用MySQL主从复制+Keepalived做双击热备,常见集群软件有Keepalived、Heartbeat。

    双机热备博文:http://lizhenliang.blog.51cto.com/7876557/1362313

    3、数据库性能优化

      如果将MySQL部署到普通的X86服务器上,在不经过任何优化情况下,MySQL理论值正常可以处理2000左右QPS,经过优化后,有可能会提升到2500左右QPS,否则,访问量当达到1500左右并发连接时,数据库处理性能就会变慢,而且硬件资源还很富裕,这时就该考虑软件问题了。那么怎样让数据库最大化发挥性能呢?一方面可以单台运行多个MySQL实例让服务器性能发挥到最大化,另一方面是对数据库进行优化,往往操作系统和数据库默认配置都比较保守,会对数据库发挥有一定限制,可对这些配置进行适当的调整,尽可能的处理更多连接数。

    具体优化有以下三个层面:

      3.1 数据库配置优化

      MySQL常用有两种存储引擎,一个是MyISAM,不支持事务处理,读性能处理快,表级别锁。另一个是InnoDB,支持事务处理(ACID),设计目标是为处理大容量数据发挥最大化性能,行级别锁。

      表锁:开销小,锁定粒度大,发生死锁概率高,相对并发也低。

      行锁:开销大,锁定粒度小,发生死锁概率低,相对并发也高。

      为什么会出现表锁和行锁呢?主要是为了保证数据的完整性,举个例子,一个用户在操作一张表,其他用户也想操作这张表,那么就要等第一个用户操作完,其他用户才能操作,表锁和行锁就是这个作用。否则多个用户同时操作一张表,肯定会数据产生冲突或者异常。

      根据以上看来,使用InnoDB存储引擎是最好的选择,也是MySQL5.5以后版本中默认存储引擎。每个存储引擎相关联参数比较多,以下列出主要影响数据库性能的参数。

      公共参数默认值:

    1

    2

    3

    4

    5

    6

    max_connections = 151

    #同时处理最大连接数,推荐设置最大连接数是上限连接数的80%左右   

    sort_buffer_size = 2M

    #查询排序时缓冲区大小,只对order by和group by起作用,可增大此值为16M

    open_files_limit = 1024 

    #打开文件数限制,如果show global status like 'open_files'查看的值等于或者大于open_files_limit值时,程序会无法连接数据库或卡死

      MyISAM参数默认值:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    key_buffer_size = 16M

    #索引缓存区大小,一般设置物理内存的30-40%

    read_buffer_size = 128K  

    #读操作缓冲区大小,推荐设置16M或32M

    query_cache_type = ON

    #打开查询缓存功能

    query_cache_limit = 1M  

    #查询缓存限制,只有1M以下查询结果才会被缓存,以免结果数据较大把缓存池覆盖

    query_cache_size = 16M  

    #查看缓冲区大小,用于缓存SELECT查询结果,下一次有同样SELECT查询将直接从缓存池返回结果,可适当成倍增加此值

      InnoDB参数默认值:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    innodb_buffer_pool_size = 128M

    #索引和数据缓冲区大小,一般设置物理内存的60%-70%

    innodb_buffer_pool_instances = 1    

    #缓冲池实例个数,推荐设置4个或8个

    innodb_flush_log_at_trx_commit = 1  

    #关键参数,0代表大约每秒写入到日志并同步到磁盘,数据库故障会丢失1秒左右事务数据。1为每执行一条SQL后写入到日志并同步到磁盘,I/O开销大,执行完SQL要等待日志读写,效率低。2代表只把日志写入到系统缓存区,再每秒同步到磁盘,效率很高,如果服务器故障,才会丢失事务数据。对数据安全性要求不是很高的推荐设置2,性能高,修改后效果明显。

    innodb_file_per_table = OFF  

    #默认是共享表空间,共享表空间idbdata文件不断增大,影响一定的I/O性能。推荐开启独立表空间模式,每个表的索引和数据都存在自己独立的表空间中,可以实现单表在不同数据库中移动。

    innodb_log_buffer_size = 8M  

    #日志缓冲区大小,由于日志最长每秒钟刷新一次,所以一般不用超过16M

      3.2 系统内核优化

      大多数MySQL都部署在linux系统上,所以操作系统的一些参数也会影响到MySQL性能,以下对linux内核进行适当优化。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    net.ipv4.tcp_fin_timeout = 30

    #TIME_WAIT超时时间,默认是60s

    net.ipv4.tcp_tw_reuse = 1    

    #1表示开启复用,允许TIME_WAIT socket重新用于新的TCP连接,0表示关闭

    net.ipv4.tcp_tw_recycle = 1  

    #1表示开启TIME_WAIT socket快速回收,0表示关闭

    net.ipv4.tcp_max_tw_buckets = 4096   

    #系统保持TIME_WAIT socket最大数量,如果超出这个数,系统将随机清除一些TIME_WAIT并打印警告信息

    net.ipv4.tcp_max_syn_backlog = 4096

    #进入SYN队列最大长度,加大队列长度可容纳更多的等待连接

      在linux系统中,如果进程打开的文件句柄数量超过系统默认值1024,就会提示“too many files open”信息,所以要调整打开文件句柄限制。

    1

    2

    3

    4

    # vi /etc/security/limits.conf  #加入以下配置,*代表所有用户,也可以指定用户,重启系统生效

    * soft nofile 65535

    * hard nofile 65535

    # ulimit -SHn 65535   #立刻生效

      3.3 硬件配置

      加大物理内存,提高文件系统性能。linux内核会从内存中分配出缓存区(系统缓存和数据缓存)来存放热数据,通过文件系统延迟写入机制,等满足条件时(如缓存区大小到达一定百分比或者执行sync命令)才会同步到磁盘。也就是说物理内存越大,分配缓存区越大,缓存数据越多。当然,服务器故障会丢失一定的缓存数据。

      SSD硬盘代替SAS硬盘,将RAID级别调整为RAID1+0,相对于RAID1和RAID5有更好的读写性能(IOPS),毕竟数据库的压力主要来自磁盘I/O方面。

    4、数据库架构扩展

      随着业务量越来越大,单台数据库服务器性能已无法满足业务需求,该考虑加机器了,该做集群了~~~。主要思想是分解单台数据库负载,突破磁盘I/O性能,热数据存放缓存中,降低磁盘I/O访问频率。

      4.1 主从复制与读写分离

      因为生产环境中,数据库大多都是读操作,所以部署一主多从架构,主数据库负责写操作,并做双击热备,多台从数据库做负载均衡,负责读操作,主流的负载均衡器有LVS、HAProxy、Nginx。

      怎么来实现读写分离呢?大多数企业是在代码层面实现读写分离,效率比较高。另一个种方式通过代理程序实现读写分离,企业中应用较少,常见代理程序有MySQL Proxy、Amoeba。在这样数据库集群架构中,大大增加数据库高并发能力,解决单台性能瓶颈问题。如果从数据库一台从库能处理2000 QPS,那么5台就能处理1w QPS,数据库横向扩展性也很容易。

      有时,面对大量写操作的应用时,单台写性能达不到业务需求。如果做双主,就会遇到数据库数据不一致现象,产生这个原因是在应用程序不同的用户会有可能操作两台数据库,同时的更新操作造成两台数据库数据库数据发生冲突或者不一致。在单库时MySQL利用存储引擎机制表锁和行锁来保证数据完整性,怎样在多台主库时解决这个问题呢?有一套基于perl语言开发的主从复制管理工具,叫MySQL-MMM(Master-Master replication managerfor Mysql,Mysql主主复制管理器),这个工具最大的优点是在同一时间只提供一台数据库写操作,有效保证数据一致性。

      主从复制博文:http://lizhenliang.blog.51cto.com/7876557/1290431

      读写分离博文:http://lizhenliang.blog.51cto.com/7876557/1305083

     MySQL-MMM博文:http://lizhenliang.blog.51cto.com/7876557/1354576

      4.2 增加缓存

      给数据库增加缓存系统,把热数据缓存到内存中,如果缓存中有要请求的数据就不再去数据库中返回结果,提高读性能。缓存实现有本地缓存和分布式缓存,本地缓存是将数据缓存到本地服务器内存中或者文件中。分布式缓存可以缓存海量数据,扩展性好,主流的分布式缓存系统有memcached、redis,memcached性能稳定,数据缓存在内存中,速度很快,QPS可达8w左右。如果想数据持久化就选择用redis,性能不低于memcached。

      工作过程:

      

    https://img-blog.csdnimg.cn/img_convert/a95e42d046f9f423a98c415be9e700e6.png

      4.3 分库

      分库是根据业务不同把相关的表切分到不同的数据库中,比如web、bbs、blog等库。如果业务量很大,还可将切分后的库做主从架构,进一步避免单个库压力过大。

      4.4 分表

      数据量的日剧增加,数据库中某个表有几百万条数据,导致查询和插入耗时太长,怎么能解决单表压力呢?你就该考虑是否把这个表拆分成多个小表,来减轻单个表的压力,提高处理效率,此方式称为分表。

      分表技术比较麻烦,要修改程序代码里的SQL语句,还要手动去创建其他表,也可以用merge存储引擎实现分表,相对简单许多。分表后,程序是对一个总表进行操作,这个总表不存放数据,只有一些分表的关系,以及更新数据的方式,总表会根据不同的查询,将压力分到不同的小表上,因此提高并发能力和磁盘I/O性能。

      分表分为垂直拆分和水平拆分:

      垂直拆分:把原来的一个很多字段的表拆分多个表,解决表的宽度问题。你可以把不常用的字段单独放到一个表中,也可以把大字段独立放一个表中,或者把关联密切的字段放一个表中。

      水平拆分:把原来一个表拆分成多个表,每个表的结构都一样,解决单表数据量大的问题。

      4.5 分区

      分区就是把一张表的数据根据表结构中的字段(如range、list、hash等)分成多个区块,这些区块可以在一个磁盘上,也可以在不同的磁盘上,分区后,表面上还是一张表,但数据散列在多个位置,这样一来,多块硬盘同时处理不同的请求,从而提高磁盘I/O读写性能,实现比较简单。

    注:增加缓存、分库、分表和分区主要由程序猿来实现。

    5、数据库维护

      数据库维护是运维工程师或者DBA主要工作,包括性能监控、性能分析、性能调优、数据库备份和恢复等。

      5.1 性能状态关键指标

      QPS,Queries Per Second:每秒查询数,一台数据库每秒能够处理的查询次数

      TPS,Transactions Per Second:每秒处理事务数

      通过show status查看运行状态,会有300多条状态信息记录,其中有几个值帮可以我们计算出QPS和TPS,如下:

      Uptime:服务器已经运行的实际,单位秒

      Questions:已经发送给数据库查询数

      Com_select:查询次数,实际操作数据库的

      Com_insert:插入次数

      Com_delete:删除次数

      Com_update:更新次数

      Com_commit:事务次数

      Com_rollback:回滚次数

      那么,计算方法来了,基于Questions计算出QPS:

    1

    2

      mysql> show global status like 'Questions';

      mysql> show global status like 'Uptime';

      QPS = Questions / Uptime

      基于Com_commit和Com_rollback计算出TPS:

    1

    2

    3

      mysql> show global status like 'Com_commit';

      mysql> show global status like 'Com_rollback';

      mysql> show global status like 'Uptime';

      TPS = (Com_commit + Com_rollback) / Uptime

      另一计算方式:基于Com_select、Com_insert、Com_delete、Com_update计算出QPS

    1

      mysql> show global status where Variable_name in('com_select','com_insert','com_delete','com_update');

      等待1秒再执行,获取间隔差值,第二次每个变量值减去第一次对应的变量值,就是QPS

      TPS计算方法:

    1

      mysql> show global status where Variable_name in('com_insert','com_delete','com_update');

      计算TPS,就不算查询操作了,计算出插入、删除、更新四个值即可。

      经网友对这两个计算方式的测试得出,当数据库中myisam表比较多时,使用Questions计算比较准确。当数据库中innodb表比较多时,则以Com_*计算比较准确。

      5.2 开启慢查询日志

      MySQL开启慢查询日志,分析出哪条SQL语句比较慢,使用set设置变量,重启服务失效,可以在my.cnf添加参数永久生效。

    1

    2

    3

    4

    mysql> set global slow-query-log=on  #开启慢查询功能

    mysql> set global slow_query_log_file='/var/log/mysql/mysql-slow.log';  #指定慢查询日志文件位置

    mysql> set global log_queries_not_using_indexes=on;   #记录没有使用索引的查询

    mysql> set global long_query_time=1;   #只记录处理时间1s以上的慢查询

      分析慢查询日志,可以使用MySQL自带的mysqldumpslow工具,分析的日志较为简单。

      # mysqldumpslow -t 3 /var/log/mysql/mysql-slow.log    #查看最慢的前三个查询

      也可以使用percona公司的pt-query-digest工具,日志分析功能全面,可分析slow log、binlog、general log。

      分析慢查询日志:pt-query-digest /var/log/mysql/mysql-slow.log

      分析binlog日志:mysqlbinlog mysql-bin.000001 >mysql-bin.000001.sql 

      pt-query-digest --type=binlog mysql-bin.000001.sql 

      分析普通日志:pt-query-digest --type=genlog localhost.log

      5.3 数据库备份

      备份数据库是最基本的工作,也是最重要的,否则后果很严重,你懂得!但由于数据库比较大,上百G,往往备份都很耗费时间,所以就该选择一个效率高的备份策略,对于数据量大的数据库,一般都采用增量备份。常用的备份工具有mysqldump、mysqlhotcopy、xtrabackup等,mysqldump比较适用于小的数据库,因为是逻辑备份,所以备份和恢复耗时都比较长。mysqlhotcopy和xtrabackup是物理备份,备份和恢复速度快,不影响数据库服务情况下进行热拷贝,建议使用xtrabackup,支持增量备份。

      Xtrabackup备份工具使用博文:http://lizhenliang.blog.51cto.com/7876557/1612800

      5.4 数据库修复

      有时候MySQL服务器突然断电、异常关闭,会导致表损坏,无法读取表数据。这时就可以用到MySQL自带的两个工具进行修复,myisamchk和mysqlcheck。

      myisamchk:只能修复myisam表,需要停止数据库

      常用参数:

      -f --force    强制修复,覆盖老的临时文件,一般不使用

      -r --recover  恢复模式

      -q --quik     快速恢复

      -a --analyze  分析表

      -o --safe-recover 老的恢复模式,如果-r无法修复,可以使用此参数试试

      -F --fast     只检查没有正常关闭的表

      快速修复weibo数据库:

      # cd /var/lib/mysql/weibo 

      # myisamchk -r -q *.MYI

      mysqlcheck:myisam和innodb表都可以用,不需要停止数据库,如修复单个表,可在数据库后面添加表名,以空格分割

      常用参数:

      -a  --all-databases  检查所有的库

      -r  --repair   修复表

      -c  --check    检查表,默认选项

      -a  --analyze  分析表

      -o  --optimize 优化表

      -q  --quik   最快检查或修复表

      -F  --fast   只检查没有正常关闭的表

      快速修复weibo数据库:

      mysqlcheck -r -q -uroot -p123 weibo 

      5.5 另外,查看CPU和I/O性能方法

      #查看CPU性能

    https://img-blog.csdnimg.cn/img_convert/432dafa8118f9bd2f40b50b84e105de8.png

      #参数-P是显示CPU数,ALL为所有,也可以只显示第几颗CPU

    https://img-blog.csdnimg.cn/img_convert/47054452e21ad148ae0bedc11ca2a69b.png

      #查看I/O性能

    https://img-blog.csdnimg.cn/img_convert/02769fb2a6258573976dedb3f00f0816.png

      #参数-m是以M单位显示,默认K

      #%util:当达到100%时,说明I/O很忙。

      #await:请求在队列中等待时间,直接影响read时间。

      I/O极限:IOPS(r/s+w/s),一般RAID0/10在1200左右。(IOPS,每秒进行读写(I/O)操作次数)

      I/O带宽:在顺序读写模式下SAS硬盘理论值在300M/s左右,SSD硬盘理论值在600M/s左右。

    展开全文
  • 消息队列的两种模式

    千次阅读 2018-11-22 10:48:18
    再说一个场景,点赞,这个在高并发的情况下,很容易造成数据库连接数占满,到时整个网站响应缓慢,才是就是想到要解决数据库的压力问题,一般就是两种方案,一是提高数据库本身的能力(如增加连接数,读写分离等),...
  • 失败魔咒下的企业海外并购(ZT)

    千次阅读 2005-07-07 21:25:00
    IT时代周刊封面:失败魔咒下的企业海外并购http://www.sina.com.cn 2005年07月07日 11:08 IT时代周刊 《IT时代周刊》特约撰稿人/秦合舫 王成钧 发自北京 编者按:TCL的坎坷、联想的前景不明和海尔新并购的延缓,...
  • 另外也刨一个坑等待兄弟们去实现:如何与现有企业环境的流程进行合并,使得新用户账户可以自动被创建。比如如何与sharepoint集成,形成工作流。 通常批量启用邮箱账户的情景有如下2: 1、ad中用户账户已存在,...
  • 一般IT部门职能有两种模式:管办分离模式和管办合一模式。 管办分离模式下,IT部门是个纯粹的技术部门,一般负责单位的信息化建设中长期规划、内部业务信息系统(OA、PDM、ERP、mail、……)开发(可选)和运维(含...
  • $merge()合并两个数组方法

    千次阅读 2017-06-21 10:15:07
    项目中用到了需要合并多个数组的方法,jq里有$.merge()方法比较好用,但是只能合并两个数组,合并多个的话需要重复使用,不可以一次性使用,这个就有点不合理啦嘿嘿!ar gallery = $('.gallery-cont'),team = $('....
  • 计算机集群简称集群是一计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过...
  • 企业上云必须先了解,三云的区别:公有云、私有云、混合云引言1. 什么是云计算2.公有云3.私有云4.混合云 引言 随着云计算的发展,如今,几乎每个企业计划或正在使用云计算,但不是每个企业都使用相同类型的云模式...
  • 浅谈Hyper-V的几备份方式

    万次阅读 2013-12-23 11:00:34
    浅谈Hyper-V的几备份方式(一)   ----snapshot虚拟机快照 转自: http://mrfly.blog.51cto.com/151750/187358 浅谈Hyper-V的几备份方式(一)----snapshot虚拟机快照 时至今日,相信大家对微软的服务器虚拟化...
  • 企业微信开发

    万次阅读 多人点赞 2018-05-10 15:19:32
    企业微信的认识企业微信概念:企业微信2016年4月18日,腾讯正式发布全平台企业办公工具“企业微信”。与微信一致的沟通体验,为企业员工提供最基础和最实用的办公服务,并加入贴合办公场景的特色功能、轻OA工具,提供...
  • 微服务架构(一新的架构方式)

    千次阅读 2018-05-15 16:53:16
    现在基本最通用的有两种方式: 同步调用: ①REST(JAX-RS,Spring Boot) ②RPC(Thrift, Dubbo) 异步消息调用(Kafka, Notify, MetaQ) 同步和异步的区别: 一般同步调用比较简单,一致性强,但是容易出调用问题,...
  • 超网合并详解

    万次阅读 多人点赞 2018-09-18 18:12:52
    超网,也称无类别域间路由选择(CIDR),它是集合多个同类互联网地址的一方法。 与子网划分(把大网络分成若干小网络)相反,它是把一些小网络组合成一个大网络,就是超网。 二、超网合并网段 1、合并网段 ...
  • 调度机构信息报送与披露工作是电力监管机构对电网公司业务监管的重要方式,是发电企业及时了解电网及其它发电企业运行情况的重要途径,有助于加强厂网协调,保证电网安全稳定运行。必然的趋势。采用网上直报方式,...
  • 初创企业融资发展的几个阶段

    万次阅读 2014-04-10 20:52:13
    要创立一家公司或者引入一个新的产品,融资必不可缺,有几可能的融资方式,合伙人筹款、向亲戚朋友借款、个人银行贷款、政府创新基金以及众筹模式。 如果需要更多资金或者有更大的发展目标,创业家可能需要转向...
  • 简述合并报表逻辑

    万次阅读 2017-04-14 14:15:44
    老梁手底下的财务,就忙开了,要把顺发和骏佳个公司的报表合并成一张汇报给老梁啊,这就有了合并报表。先来分析一下,骏佳的实际控制人是谁呢?--顺发。一、来讲讲什么是控制:字面上的意思,控制是指投
  • DevOps企业实践指南(6): 持续集成

    千次阅读 2017-08-02 09:02:38
    在软件开发企业在进行DevOps实践时,持续集成扮演着一个重要的角色。这篇文章将会从持续集成的目标/价值/原则等方面进行阐述和总结,希望对企业的DevOps落地实践提供一些切实可行的帮助和建议。
  • 命令行批量合并视频脚本

    千次阅读 2018-01-27 00:34:00
    批量合并视频头部  需要ffmpeg, 目前直接... ffmpeg的合并方式有三种, 参考 : 这儿 , 我选择配置文件合并方式, 因为其他两种我这边测试无法合并视频: ffmpeg -f concat -i mylist.txt -c copy outp...
  • DevOps企业实践指南(7): 版本管理

    千次阅读 2017-08-10 10:31:38
    在这篇文章中我们将会结合企业实施版本管理中经常会出现的七个场景去理解为什么版本管理是复杂的,在此基础上提出”版本管理的七问”用以对帮助企业对自身版本管理能力进行快速的定位,同时在此基础上进行适合自己的...
  • 2018高新技术企业认定的...(1)认定条件:在中国境内(不含港、澳、台地区)注册的企业,近三年内通过自主研发、受让、受赠、并购方式,或通过5年以上的独占许可方式,对其主要产品(服务)的核心技术拥有自主知识
  • 联邦企业架构之FEA及参考模型

    千次阅读 2019-01-19 11:37:11
    在CIO委员会提出了FEAF与联邦企业架构实施指南后,美国...与FEAF不一样,FEA(Federal Enterprise Architecture,即联邦企业架构)并不是一理论化的企业架构开发方法论,而是联邦政府所要建立的企业架构本身,以...
  • 原文出处:here刚刚过去的一个热点,滴滴和 UBER,补贴大战、传言合并、辟谣、再传言、再辟谣、真合并。一如过去两年中国互联网中的合并大戏,滴滴+快的,美团+点评...这让我们不禁要问,这两种文化各有什么特点,谁优
  • 企业没“文化”很可怕

    千次阅读 2013-10-09 11:34:04
    为什么企业间的并购总是伴随着文化冲突和融合的难题?  靠什么凝聚团队,拿什么重唤热情?只能靠企业文化。但没有一位企业家不因文化问题而痛苦!文化是水,水能载舟亦能覆舟! 企业文化在公司内部能否真的深入...
  • 分析Cisco企业园区构架

    千次阅读 2017-04-13 09:44:00
    分析Cisco企业园区架构 本篇是基于《CCNP SWITCH(642-813)学习指南》做的学习笔记。如有纰漏,恳请指正。 1.1 企业园区网设计概述 Cisco拥有多种企业园区网的设计模型,这些设计模型都是对各类企业网络的抽象与...
  • 马云揭秘雅虎阿里巴巴合并:这是我最艰难的一年(实话实说长篇)作者:不见不散 日期:2006-10-17 一家处处以“世界最好”作为战略基点的中国互联网公司,在过去一年是如何应付全球化战略的第一步——并购——所导致的...
  • 本书先介绍了一些企业应用开发的基础知识,比如分层架构、WEB表现、业务逻辑、数据库映射、并发、会话、分布策略等等。通过使用场景、解决方案、UML等手段详细介绍了设计模式(包括一些常用的设计模式GOF23和本书上...
  • 当我们建立一个数据库时,并且想将分散在各处的不同类型的数据库分类汇总在这个新建的数据库中时,... 在sql server中主要有三种方式导入导出数据:使用Transact-SQL对数据进行处理;调用命令行工具BCP处理数据;使用数

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 78,261
精华内容 31,304
关键字:

企业合并的两种方式