高手過來看看,四千萬的數據量(8G)如何提高運行效率

chenxdb 2006-04-04 04:31:48
描述如下:
1)有如下二個TABLE:T1,T2,結構相同,下如所示
A varchar(100) not null
B varchar(100) not null
C varchar(100) not null
D varchar(100) not null
E float
F float
注:A+B+C+D構成KEY值(主鍵,並加索引)

2)運算為:
a)T1與T2與相比較,KEY值(主鍵)一樣,當字段E與字段F有一不一樣時為所求記錄。
b)T1與T2與相比較,對比KEY值(主鍵)當對方沒有此KEY值時,就為所求。

3)例:
T1 Table 數據
a1,b1,c1,d1,1,3
a2,b2,c2,d2,1,2

T2 Table 數據
a1,b1,c1,d1,1,2
a3,b3,c3,d3,1,2

運算3)a時,得出
a1,b1,c1,d1

運算3)b時,得出
a2,b2,c2,d2
a3,b3,c3,d3

4)數據量:
T1與T2的資料量各為2000萬條記錄的數據量。

5)在求2)的運算時,我使用的方法為:
a)
select T1.A,T1.B,T1.C,T1.D, from T1
inner join T2
T1.A=T2.A
and T1.A=T2.A
and T1.B=T2.BA
and T1.C=T2.C
and T1.D=T2.D
and (T1.E<>T2.E or T1.F<>T2.F)

b)
select T1.A,T1.B,T1.C,T1.D, from T1
left join T2
T1.A=T2.A
and T1.A=T2.A
and T1.B=T2.B
and T1.C=T2.C
and T1.D=T2.D
where
T2.A is null
union
select T2.A,T2.BT2.C,T2.D, from from T1
Right join T2
T1.A=T2.A
and T1.A=T2.A
and T1.B=T2.B
and T1.C=T2.C
and T1.D=T2.D
where
T1.A is null

在運行了以上SQL計算時非常慢。第一個SQL將近5分鐘。第二個SQL近15分鐘,而且數據庫運行時內存占用1.5G左右。請問各路高手,這情況可以優化嗎?希望總時間不要超過3分鐘。如果可以怎麼優化?
...全文
547 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
liujuns 2006-06-28
  • 打赏
  • 举报
回复
实际上在这个表结构上是很难提高了
分表或者是将历史资料用数据仓库可能会好点
完美人生2013 2006-06-28
  • 打赏
  • 举报
回复
这个表再怎么优化查询都可能不会带来实质上的提高,因为针对表查询的优化,无非是尽可能避免全表扫描提高查询效率,根据楼主的要求,如果要执行这样的查询,肯定要执行全表扫描,4000万数据的全表扫描是很花时间的。因此建议看能否从表设计方面考虑,改进表的设计,然后再考虑优化查询。
rayt2005 2006-06-28
  • 打赏
  • 举报
回复
A varchar(100) not null
B varchar(100) not null
C varchar(100) not null
D varchar(100) not null

用VARCHAR类型做主键真是会想的出来,这会有效率最低的比较效率
用DECIMAL类型会好很多
JOYCE_WEI 2006-06-27
  • 打赏
  • 举报
回复
关注
huaxiangniaoyu 2006-06-27
  • 打赏
  • 举报
回复
不用想也是,要么是你的表和索引设计有问题,要么就是你的前台代码和索引的设计配合的不好,顺便提一下,要记得重建索引,大容量的数据提防索引页碎片。

100万条数据都那么慢,想都不用想,相关的原因太多,包括网络、服务器、OS、数据库后台设计、前台设计,以及互相之间的协调问题,这个课题太大了,第一段话只是随便提一下。
enslaver 2006-06-27
  • 打赏
  • 举报
回复
http://www.microsoft.com/china/MSDN/library/data/sqlserver/FiveWaystoRevupYourSQLPerformanCE.mspx?mfr=true
chenxdb 2006-06-27
  • 打赏
  • 举报
回复
UP 速度越來越慢了。現查詢一次需要30分鐘了。簡直無法忍受。DX過來幫幫忙啊。怎麼樣做可以,只要速度能提高,數據能查到就可以了。
panjinfu80 2006-04-08
  • 打赏
  • 举报
回复
使用数据库高级服务器。
普通电脑想快都快不了。
分区视图。
分页显示数据。

做鸡真好吃 2006-04-08
  • 打赏
  • 举报
回复
UP~
cari_ayong 2006-04-06
  • 打赏
  • 举报
回复
表的设计还能变吗?
iamltd 2006-04-06
  • 打赏
  • 举报
回复
select T1.A,T1.B,T1.C,T1.D, from T1
inner join T2
on T1.A=T2.A
and T1.B=T2.B
and T1.C=T2.C
and T1.D=T2.D
where (T1.E>T2.E and t1.e<t2.e)or (T1.F<T2.F and t1.f>t2.f)

建立索引e+f+a+b+c+d

select * from t1 where
not exists(select a from t2 where t2.a=t1.a and and T1.B=T2.B
and T1.C=T2.C and T1.D=T2.D)
union
select * from t2 where
not exists(select a from t1 where t2.a=t1.a and and T1.B=T2.B
and T1.C=T2.C and T1.D=T2.D)

这样应该会快一些了
luoxiangdong 2006-04-06
  • 打赏
  • 举报
回复
是否可以分表处理呢?
chenxdb 2006-04-06
  • 打赏
  • 举报
回复
自己頂。各路高手,幫忙提點改善建議也好啊。
chenxdb 2006-04-04
  • 打赏
  • 举报
回复
可能是服務器還算湊合吧4G的內存,二個3.2G的CUP。4個SISC硬盤,共240G。但這程序運行起來時,服務器響應也很變得很慢。
snwyq 2006-04-04
  • 打赏
  • 举报
回复
15分钟,也太快了,我才100万记录,最后超时了。
chenxdb 2006-04-04
  • 打赏
  • 举报
回复
補充:
第一個查詢大約為一萬條記錄
第二個查詢大約為有一百萬條記錄
92讲视频课+16大项目实战+课件源码  为什么学习数据分析?       人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。      从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。   本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。  二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。  四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。  五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧