zoukankan      html  css  js  c++  java
  • 一个计票程序的设计


      问题
       有3万张选票,每张选票上有32个选择,每人必需在32个选择中选20个.
       表设计:
        Vote(Id,Editor,AddTime)--选票主表,
             VoteDetail(Id,VoteId,OptionId)--选票细表

    ---------------------------------------
    基本上一个简单的计票程序就这样了,不过后来又有了个新的要求,就是需要把数据能导到Excel里,导出的格式应该是
    编号 添加人 选择1 选择2 选择3 选择4 ....选择32  这样就需要把使用了明细表结构的数据重新还原成选票的格式.

    统计SQL代码如下(可以按Vote.ID范围进行水平分割,导入到多个Excel文件中 )
    ---------------------------

    Select Editor,AddTime,

    Case (Select 1 From voteDetail Where voteDetail.VoteId=Vote.Id And OptionId=1)
    When 1 Then 1
    Else 0
    End  As Option1,

    Case (Select 1 From voteDetail Where voteDetail.VoteId=Vote.Id And OptionId=2)
    When 1 Then 1
    Else 0
    End  As Option2,

    Case (Select 1 From voteDetail Where voteDetail.VoteId=Vote.Id And OptionId=3)
    When 1 Then 1
    Else 0
    End  As Option3,

    Case (Select 1 From voteDetail Where voteDetail.VoteId=Vote.Id And OptionId=4)
    When 1 Then 1
    Else 0
    End  As Option4,

    Case (Select 1 From voteDetail Where voteDetail.VoteId=Vote.Id And OptionId=5)
    When 1 Then 1
    Else 0
    End  As Option5,
    ................................................省略

    Case (Select 1 From voteDetail Where voteDetail.VoteId=Vote.Id And OptionId=32)
    When 1 Then 1
    Else 0
    End  As Option32

    From Vote

    ------------------------------------------------
    上面这段代码在少量测试数据时没问题,但是当我模拟导入3万张选票,VoteDetail中有60万条记录时,上面的查询就出问题了,
    查询长时间没回应,cup使用率一直保持在50%以上,查看查询计划是发现, 每个选择列(如 Option1..Option2)的生成是主表跟VoteDetail表进行Nested Loops操作产生的集合,由于出于习惯在VoteDetail中加入了一个不相关主键Id后导致以上每个分枝(列) 都要进行Index Spool操作,生成临时记录集,严重影响了查询性能,
    后来把VoteDetail表的ID列去掉,设置VoteId,OptionId为主键 即VoteDetail(VoteId,OptionId),处理后NestedLoops内层循环直接通过过聚集索引(主键)定位数据,整个查询在VoteDetail表有60万条记录时,只要2秒不到的时间就可以完成!
     
     

  • 相关阅读:
    二叉排序树
    C# 大端与小端
    【转】C#socket通信
    【转】Github 搜索技巧,快速找到好资源
    web api 跨域请求,ajax跨域调用webapi
    【转】Linux简介及最常用命令
    【转】带你吃透RTMP
    09-vuex基本应用之计数demo
    08-配置vue路由的步骤
    02-原型与原型链
  • 原文地址:https://www.cnblogs.com/wdfrog/p/1385268.html
Copyright © 2011-2022 走看看