说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

碰到大难题了.有没有更好更快的处理方法?要的是速度!

编辑:说三道四文库 发布时间:2018-06-24 07:23
HTML文档下载 WORD文档下载 PDF文档下载
一个光电行业的应用。 有一种机器,它会自动测试芯片。测完一片芯片后会产生一个CSV的文件。文件里一般会有40万笔的数据。就是相当于芯片中的每一个颗粒都会测试到。存放这个CSV文件的table名字叫RowDataBody.表结构如下:
[TEST] [varchar](50) NULL,
[PosX] [varchar](50) NULL,
[PosY] [varchar](50) NULL,
[BIN] [varchar](50) NULL,
[VF1] [varchar](50) NULL,
[VF2] [varchar](50) NULL,
[VF3] [varchar](50) NULL,
[VF4] [varchar](50) NULL,
[VFD] [varchar](50) NULL,
[VZ1] [varchar](50) NULL,
[IR] [varchar](50) NULL,
[IV1] [varchar](50) NULL,
[LOP1] [varchar](50) NULL,
[WLP1] [varchar](50) NULL,
[WLD1] [varchar](50) NULL,
[WLC1] [varchar](50) NULL,
[HW1] [varchar](50) NULL,
[PURITY1] [varchar](50) NULL,
[X1] [varchar](50) NULL,
[Y1] [varchar](50) NULL,
[Z1] [varchar](50) NULL,
[ST1] [varchar](50) NULL,
[INT1] [varchar](50) NULL,
[IV2] [varchar](50) NULL,
[LOP2] [varchar](50) NULL,
[WLP2] [varchar](50) NULL,
[WLD2] [varchar](50) NULL,
[WLC2] [varchar](50) NULL,
[HW2] [varchar](50) NULL,
[PURITY2] [varchar](50) NULL,
[X2] [varchar](50) NULL,
[Y2] [varchar](50) NULL,
[Z2] [varchar](50) NULL,
[ST2] [varchar](50) NULL,
[INT2] [varchar](50) NULL,
[ESDPASS] [varchar](50) NULL,
[ESDSTOP] [varchar](50) NULL,
[ESDIR] [varchar](50) NULL,
[ESDVZ] [varchar](50) NULL,
[ESDVF3] [varchar](50) NULL,
[ESDVF1] [varchar](50) NULL,
[IDs] [int] NULL,
[IDss] [int] NULL,
[ID] [int] IDENTITY(1,1) NOT NULL

其中的BIN字段,会从一个固定的数据表中获得。用来算出这个颗粒的特性值.字段VF1开始到ESDVF1结束,这些字段都是这个颗粒的特性值.根据这些特性值,要从另外一个表中tb_BinTables获得它的BIN值。tb_BinTables结构如下:
[IDs] [bigint] NOT NULL,
[ID] [bigint] NULL,
[IFlag] [bigint] NULL,
[IOrder] [bigint] NULL,
[iBIN] [int] NULL,
[cOPTION] [nvarchar](50) NULL,
[cRANK] [nvarchar](50) NULL,
[iVF3L] [decimal](8, 2) NULL,
[iVF3H] [decimal](8, 2) NULL,
[iIV1L] [decimal](8, 2) NULL,
[iIV1H] [decimal](8, 2) NULL,
[iLOP1L] [decimal](8, 2) NULL,
[iLOP1H] [decimal](8, 2) NULL,
[iVF1L] [decimal](8, 2) NULL,
[iVF1H] [decimal](8, 2) NULL,
[iWD1L] [decimal](8, 2) NULL,
[iWD1H] [decimal](8, 2) NULL,
[iIRL] [decimal](8, 2) NULL,
[iIRH] [decimal](8, 2) NULL,
[iVZ1L] [decimal](8, 2) NULL,
[iVZ1H] [decimal](8, 2) NULL,
[iWP1L] [decimal](8, 2) NULL,
[iWP1H] [decimal](8, 2) NULL,
[iHW1L] [decimal](8, 2) NULL,
[iHW1H] [decimal](8, 2) NULL,
[iVF2L] [decimal](8, 2) NULL,
[iVF2H] [decimal](8, 2) NULL,
[iIV2L] [decimal](8, 2) NULL,
[iIV2H] [decimal](8, 2) NULL,
[iLOP2L] [decimal](8, 2) NULL,
[iLOP2H] [decimal](8, 2) NULL,
[iWD2L] [decimal](8, 2) NULL,
[iWD2H] [decimal](8, 2) NULL,
[iVFDL] [decimal](8, 2) NULL,
[iVFDH] [decimal](8, 2) NULL,
[iVF4L] [decimal](8, 2) NULL,
[iVF4H] [decimal](8, 2) NULL,
[iWX1L] [decimal](8, 2) NULL,
[iWX1H] [decimal](8, 2) NULL,
[iWY1L] [decimal](8, 2) NULL,
[iWY1H] [decimal](8, 2) NULL,
[iPurityL] [decimal](8, 2) NULL,
[iPurityH] [decimal](8, 2) NULL,
[cmdl] [nvarchar](20) NULL
 
表RowDataBody中的VF1值针对tb_BinTables表中的iVF1L,iVF1H.   L代表VF1这个特性值的最低值,H代表是这个特性的最高值
所以,要    iVF1L<=VF1<=iVF1H.  其它字段依次类推。  一般一个芯片的特性值会有150笔记录。
所以,为了找出RowDataBody的BIN值。我需要用VF1~ESDVF1的值去tb_BinTables找相对应的BIN值,然后update回RowDataBody.
按一般思路的话,一个芯片要做 40万*150=600万次。 
各位有什么好的思路。这样处理太慢了。

这个表结构。。。
tb_BinTables表多少记录?

两表通过什么关联?IDs?关联字段有无索引

用一个语句可以一次更新所有的40万记录,如果索引配合的话不会太慢,不用太担心计算次数。
你那个特征值表,应该保存的是范围而不是具体的数值吧,这样对照,细微的差别就是不相同.
建议自己先把表结构写好语句后再上传,要不然乱七八糟的.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘