遗忘海岸

江湖程序员 -Feiph(LM战士)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

一个计票程序的设计


  问题
   有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秒不到的时间就可以完成!
 
 

posted on   遗忘海岸  阅读(630)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示