I
imail_my
Unregistered / Unconfirmed
GUEST, unregistred user!
小弟最近在修改公司的ERP系统,发现部分模块在进行数据操作的时候特别慢
(DB SERVER XEON 2.4G 512M 70G SCSI),模块中用到几个表的数据,每个表的记录都上30000条(ERP是外面公司写的表结构很烂,乱七八糟的FIELD多的很)现以两个表的查询为例说明
A表(30000 record)
Key Field A1,A2,A3
B表(30000 record)
Key Field B1,B2,B3
A1,A2,A3 B1,B2,B3 成对应关系
现要查出 B表中不存在B1,B2,B3 的A表记录
我写了两个语句进行分析
1
select * from A where A1+A2+A3 NOT IN(select B1+B2+B3 FROM B)
2
select * from A where NOT EXISTS(select '1' FROM B B1+B2+B3=A1+A2+A3)
用事件探查的时候发现2的语句较优化一些
3
在B表保存的时候就在A表中作一个标记An='Y'
select * from A where An='N'
这些就是我脑子里的方法(太菜)我想知道大家用的是什么方法(语句),各大虾谢谢了...
(DB SERVER XEON 2.4G 512M 70G SCSI),模块中用到几个表的数据,每个表的记录都上30000条(ERP是外面公司写的表结构很烂,乱七八糟的FIELD多的很)现以两个表的查询为例说明
A表(30000 record)
Key Field A1,A2,A3
B表(30000 record)
Key Field B1,B2,B3
A1,A2,A3 B1,B2,B3 成对应关系
现要查出 B表中不存在B1,B2,B3 的A表记录
我写了两个语句进行分析
1
select * from A where A1+A2+A3 NOT IN(select B1+B2+B3 FROM B)
2
select * from A where NOT EXISTS(select '1' FROM B B1+B2+B3=A1+A2+A3)
用事件探查的时候发现2的语句较优化一些
3
在B表保存的时候就在A表中作一个标记An='Y'
select * from A where An='N'
这些就是我脑子里的方法(太菜)我想知道大家用的是什么方法(语句),各大虾谢谢了...