问题描述
有一数据表(产品标签表,每个产品一个唯一的SN,每月100万左右),查询界面上有2个联动下拉框,【规格】____,【批次】______
用户选择一个规格后(目前200来个规格),列出该规格下达过的生产计划的批次。

原有方式
规格列表
select 规格 from 标签表 group by 规格

根据规格获取批次
select 批次 From 标签表 Where 规格=‘某一规格’ group by 批次

由于要进行全表扫描,当数据到50万以上时速度就明显慢下来了,而到200万时上面任意一个查询都要1分钟左右。

解决方案

方案1:建立索引
组合“规格,批次”建立一个索引(批次单独建立了聚集索引)。
问题,因为一条记录对应一个索引条目,所以这个方案需要很多额外的空间,另外原来表上已经有3个索引了,过多的索引会导致更新与插入性能下降,并且死锁风险会提高,作为流水线上使用的模块,性是有要求的。

方案2:建立一张规格批次对应表,记录规格跟批次的对关系
由于规格200来个并且比较稳定,批次一月也就100来个,而且这100个批次只分配给二三十个批次所以这两者的组合一个月也就1500-2000条左右。

考虑使用规格批次对应表后,进一步就是确定怎么维护对应表的数据,
方式一,就是每次生产任务分解生成标签的同时更新规格批次对应表(即标签表记录的增删改时做对应的操作)。考虑那个任务分解代码已经够纠结了,不打算大量修改程序代码。

方式二,数据库建立个作业,定期增量更新
生产任务会做调整(删除或更改),不过变动几率不高,而且多数改动都在上班时间内任务下达后1-2小时内修改(隔天的基本已经在执行状态或已经完成了)
所以作业安排在晚上12点进行,而作业执行点之后标签表新增记录的规格与批次的对应关系则没包括在对应表中,因此下拉框的查询结果来自两部,作业执行点前的规格批次对应关系来自对应表,而作业执行点后规格批次对应关系则直接查询标签表,由于每次作业执行点都记录当前统计时最大的记录ID号,因此查询标签表时会使用如下的查询语句:
Select  批次 From 标签表 Where 规格='某一规格' And Id>xxxx ,由于在Id上建了索引,而每天心记录在3,4万条,所以这个查询在执行时间上基本稳定。

完成的代码类似下面:

View Code

ALTER Proc [dbo].[Get批次By规格]
@规格 nvarchar(20)
AsCreate Table #t_CT_BNO_MAP_tmp
( 批次 nvarchar(20)) Declare @MaxLblId bigintDeclare @SQL nvarchar(2000)Set @MaxLblId=0select @MaxLblId= Max(LblId) From 规格批次对应表Set @SQL=
'select 批次From(Select 批次 from 标签表  where Id>='+cast(@MaxLbLId as nvarchar(50))+' And  规格='''+@规格+'''group by 批次  UnionSelect 批次  From 规格批次对应表 where 规格='''+ @规格+''') as tgroup by 批次'Insert Into #t_CT_BNO_MAP_tmp
Exec(@SQL)Select * from #t_CT_BNO_MAP_tmpDrop Table #t_CT_BNO_MAP_tmp

注意点:
上面采用了动态SQL来执行包含" Id>='+cast(@MaxLbLId as nvarchar(50))+" 的语句来获取标签表中的规格批次对应关系,如果不采用动态SQL,直接使用
Id>@MaxLblId的条件,那么由于是存储过程MSSQL查询优化器不清楚MaxLblId可能是多少,而忽略Id上已建的索引,而进行全表扫描。
两者的执行过程如下图:
(静态SQL语句)

(动态SQL语句)

作业任务代码:

View Code

declare @MaxLblId bigint
Declare @SQL nvarchar(2000)
Set @MaxLblId=0
select @MaxLblId= Max(LblId) From dbo.规格批次表Set @SQL='
Insert Into 规格批次表(规格,batno,LblId)
select 规格,Batno,LblId
From(Select 规格,batno Batno,Max(Id) LblId from 标签表    where Id>='+cast(@MaxLbLId as nvarchar(50))+'group by 规格, batnoExceptSelect 规格,Batno,LblIdFrom KB_Lable_CT_BNO_MAP ) as t
'
Exec(@SQL)

转载于:https://www.cnblogs.com/wdfrog/archive/2013/03/03/2941302.html

一个大数据量表访问优化--联动下拉框查询优化相关推荐

  1. 大数据量表的优化查询

    1:索引,我们最先想到的就是创建索引,创建索引可以成倍的提升查询的效率,节省时间.但是如果数据量太过于巨大的时候,这个时候单纯的创建索引是无济于事的,我们知道假如特别是在大数据量中统计查询,就拿100 ...

  2. 提高大数据量并发访问时效率

    最近在做windows服务方面的开发,主要用它来解决A服务和其他服务发送数据失败后,重新发送的问题. 为了提高大数据量并发访问时效率问题,要在多台服务器上安装服务并采用多线程,就像是超市的收银,利用多 ...

  3. mysql scrapy 重复数据_MySQL大数据量表中删除重复记录

    MySQL大数据量表中删除重复记录 最近工作中需要抓取大量新闻,抓取的数据中由于一些原因存在一些重复数据,而整个数据表的记录数接近10万条,大小接近1个G,又在我自己的渣渣本本上,查询速度十分不理想, ...

  4. 针对大数据量的渲染优化库:react-virtual的基本使用

    针对大数据量的渲染优化库:react-virtual的基本使用 针对大数据量的渲染优化库:react-virtual(List)的基本使用 react-virtual库的安装及引用 安装 使用 针对大 ...

  5. 如何构建一个大数据量的搜索引擎

    构建一个大数据量的搜索引擎,数据很重要,数据来源在哪里呢?一方面可以从站内结构化数据库导入,如MySQL,Oracle等数据库,构建一个站内搜索引擎,提高查询速度.另一方面构建一个分布式爬虫,每天定时 ...

  6. 航测大数据量处理_【应用案例】徕卡HxMap软件并行处理环境 在大数据量、高效率处理要求下的应用...

    原标题:[应用案例]徕卡HxMap软件并行处理环境 在大数据量.高效率处理要求下的应用 1. HxMap软件简介 HxMap是徕卡航空传感器通用数据处理平台,可提供徕卡测量多款航摄仪的数据后处理以及三 ...

  7. 2018最新版省市区三级联动下拉框+所有源代码以及数据库

    2018年国家统计局最新数据,JSP+Servlet+Dao实现省市区三级联动下拉框的效果 DropdownDAO.java -–Dao层 package com;import java.sql.Co ...

  8. javascript实现下拉条联动_js实现多级联动下拉框

    花了半天时间实现一个多级联动下拉框,目的是对某一植物进行"门纲目科属"的归类.使用的技术是javascript+xml,之所以不用数据库,一来这方面的数据虽然量大但都是固定不变的, ...

  9. 联动下拉框显示省市县

    首先,这次用到的知识点有三层的逻辑还有连接数据库知识以及传参知识点,废话不多说,首先展示页面: 首先第一本机的数据库,连接字符创写在app.cofing里,这个不用多说了: <configura ...

最新文章

  1. 欧洲估值最高的5家人工智能创业公司
  2. URL存在http host头攻击漏洞-修复方案
  3. linq之Capacity(转载)
  4. QT的QQmlApplicationEngine类的使用
  5. [转]js实现简单的双向数据绑定
  6. JavaScript的排序问题
  7. android wifi 连不上手机助手,usb调试断断续续的很烦?试试adb wifi调试
  8. python使用sql读取数据表并返回dataframe
  9. silverlight经典案例
  10. dateformat java 并发_SimpleDateFormat并发隐患及其解决
  11. 基于SOLIDWORKS Simulation的有限元分析法实例应用
  12. 淄博市区地图最新版_淄博地图全图高清版下载|
  13. 2022电工(初级)考试模拟100题模拟考试平台操作
  14. Android图片轮播控件 如果对你有帮助请star哦!
  15. pip‘s dependency resolver does not currently take into account 解决办法
  16. 电商API:淘宝/天猫获取sku详细信息
  17. 再见,戴威!再见,小黄车!
  18. 【IT文化杂谈】硅谷,仙童与“八叛徒”的故事
  19. daad转换器实验数据_DAAD留德日记作者:20分钟我拿到了德企总部的实习offer
  20. Spring Cloud(15)——配置中心

热门文章

  1. requirejs插件-domReady插件
  2. 红外探头_问题3: 关于在线近红外光谱仪的探头
  3. C++笔记-二级指针在反汇编中的形式
  4. C/C++ | Qt 实现爬虫功能,爬取CSDN博客文章
  5. unity3d Android多渠道,Unity For Android多渠道SDK接入解决方案
  6. 精确的数据访问冲突_每个程序员都必须知道的8种通用数据结构
  7. html点击图片放大_vue 插件之picture-markert图片标注
  8. python基础语法+爬虫精进.pdf_风变编程《Python基础语法+爬虫精进》
  9. 微信小程序上传大于4m_微信定制小程序开发
  10. linux下的Tomcat启动