Redian新闻
>
老印给我的一个Challenge
avatar
老印给我的一个Challenge# Database - 数据库
p*m
1
整理了一下手机,忽然发现自己不知不觉也弄了一堆十字绣了。发上来给大家看看吧。
大部分的十字绣都是在纯色的布上的,如果有MM喜欢样子,我可以把图发给你或者寄给
你,反正我也已经做完了。:)
1,做的最老的一个,是朋友送的。这个的图纸我可能是没有了。那时还不太在意留图纸来着。
avatar
b*g
2
老印做数据库的特点:
爱用Stored Procedure
爱从一个表导到另一个表(从不吝惜用Temporary Table)
爱用Dynamic SQL
现在组里的老印和我同做一个项目,有一个问题不知道怎么解决:
Table Source 到 Table Dest_xxx 导数据
限制条件:
1、不用SSIS
2、Dest_xxx可变,具体表名从另外一个设置表 Table Config 里查
3、设置发生变化 Dest_xxx 后,只需要改设置的数据,不需要修改程序
老印主张用Dynamic SQL,我想避免用Dynamic SQL(主要从Performance方面考虑)。
现在想请教大牛们,有什么办法没有?
avatar
p*m
3
2.第二个,买的时候以为很简单,结果大面积的衣服和人的脸,弄得我很烦。只是这个
图纸也不在了,生生给折来折去弄散了。:(
avatar
a9
4
dynamic sql相比导表来讲,性能没什么损失吧?

【在 b******g 的大作中提到】
: 老印做数据库的特点:
: 爱用Stored Procedure
: 爱从一个表导到另一个表(从不吝惜用Temporary Table)
: 爱用Dynamic SQL
: 现在组里的老印和我同做一个项目,有一个问题不知道怎么解决:
: Table Source 到 Table Dest_xxx 导数据
: 限制条件:
: 1、不用SSIS
: 2、Dest_xxx可变,具体表名从另外一个设置表 Table Config 里查
: 3、设置发生变化 Dest_xxx 后,只需要改设置的数据,不需要修改程序

avatar
p*m
5
3.这是公公过生日给准备的礼物。装裱好后的图片找不到了。只有这么个皱皱巴巴的。
不过这个图还是挺应景的。图纸还在。就是这个用的线很多,自己可能不是特别好配?
avatar
b*g
6
If it is just one dynamic SQL, the recompile time is not an issue.
The thing is the design is using a cursor, looping through each record.
Inside the loop, there is the dynamic SQL (INSERT INTO). Then every time
calling the dynamic SQL in the loop, it is recompiled - the recompile time
will multiply the number of records.
For thousands of records, the performance might be acceptable, but for
millions level, it will be a big overhead.

【在 a9 的大作中提到】
: dynamic sql相比导表来讲,性能没什么损失吧?
avatar
p*m
7
4.这个我先后做了两套,不是完全一样,不过差不太多。一套给婆婆生日,一套给爸爸
生日了。我手头现在有老爸老妈的图纸,也有老公老婆的图纸。不过这个是靠垫上的。
另,很好绣的。
avatar
j*n
8
I assume your cursor is only for retrieving the table names from the
configure table. Then it should be fine since no million of rows there.
Just curious, why SSIS cannot be used?

【在 b******g 的大作中提到】
: If it is just one dynamic SQL, the recompile time is not an issue.
: The thing is the design is using a cursor, looping through each record.
: Inside the loop, there is the dynamic SQL (INSERT INTO). Then every time
: calling the dynamic SQL in the loop, it is recompiled - the recompile time
: will multiply the number of records.
: For thousands of records, the performance might be acceptable, but for
: millions level, it will be a big overhead.

avatar
p*m
9
5.这个是自己绣着玩的,绣了两个打算以后自己放在家里当靠垫。这是最最容易的一个
。好像两天就弄出来了。我还有全新的图纸。
avatar
B*g
10
不明白,为什么每个record都要call一下?

【在 b******g 的大作中提到】
: If it is just one dynamic SQL, the recompile time is not an issue.
: The thing is the design is using a cursor, looping through each record.
: Inside the loop, there is the dynamic SQL (INSERT INTO). Then every time
: calling the dynamic SQL in the loop, it is recompiled - the recompile time
: will multiply the number of records.
: For thousands of records, the performance might be acceptable, but for
: millions level, it will be a big overhead.

avatar
p*m
11
6。这个是给小外甥的靠垫。很cute。我自己还是挺喜欢的。图纸还在,就是也需要自
己配线。
avatar
b*g
12
Negative. The cursor is for retrieving at least 100K records.
If I were the original designer, I would have chosen SSIS. Now it is the
halfway, with the design approved, no one would want to go backwards.

【在 j*****n 的大作中提到】
: I assume your cursor is only for retrieving the table names from the
: configure table. Then it should be fine since no million of rows there.
: Just curious, why SSIS cannot be used?

avatar
p*m
13
7。这个是我自己比较喜欢的一个图,就是白底红线。我做了来给爸妈弄回去做过年的
礼物的,讨个喜头。老人还是挺喜欢的。图纸还在。不过这个其实弄起来挺烦人的。:(
avatar
b*g
14
导表过程中先要做Validation和Data Cleaning,然后才是INSERT到Dest_xxx表。用
CURSOR从编程角度看,逻辑更简单。要CURSOR LOOP,自然是要每个Record都Call一下。
另外,我想挑战一下这个Dest_xxx的设计。设计估计是老印做的,他告诉我的是为了系
统扩容后,不同子系统使用不同的Dest_xxx表,可以减少子系统相互之间Lock。
如果没有了动态的Dest_xxx,Dynamic SQL 自然就不需要了。

【在 B*****g 的大作中提到】
: 不明白,为什么每个record都要call一下?
avatar
p*m
15
8。这是最近刚完工的一个,不过短期内也不打算开工了。这个断断续续弄了快一个月
。到后来自己都烦了。挺大的。本来决定给小外甥做礼物的,现在决定那么大的工程,
以后估计不会再做了,我留下来以后裱了放自己家里书房吧。:)对那些做大十字绣的
MM真是佩服的五体投地呀,反正我一个就够够的了。哦,这个的图纸在。如果有人愿意
绣,可以打招呼。
avatar
B*g
16
先做validation,data clean.
然后把valid的record再insert

下。

【在 b******g 的大作中提到】
: 导表过程中先要做Validation和Data Cleaning,然后才是INSERT到Dest_xxx表。用
: CURSOR从编程角度看,逻辑更简单。要CURSOR LOOP,自然是要每个Record都Call一下。
: 另外,我想挑战一下这个Dest_xxx的设计。设计估计是老印做的,他告诉我的是为了系
: 统扩容后,不同子系统使用不同的Dest_xxx表,可以减少子系统相互之间Lock。
: 如果没有了动态的Dest_xxx,Dynamic SQL 自然就不需要了。

avatar
j*g
17
呀,这个很喜欢。你绣了不少啊。

【在 p****m 的大作中提到】
: 6。这个是给小外甥的靠垫。很cute。我自己还是挺喜欢的。图纸还在,就是也需要自
: 己配线。

avatar
j*n
18
Validation和Data Cleaning can be done in staging table and using queries
instead of cursors. Most of programming in cursor can be turned to queries,
at least in my life.
CURSOR从编程角度看,逻辑更简单? No, that's only mean that you are not a
complete DB guy yet... :-)

下。

【在 b******g 的大作中提到】
: 导表过程中先要做Validation和Data Cleaning,然后才是INSERT到Dest_xxx表。用
: CURSOR从编程角度看,逻辑更简单。要CURSOR LOOP,自然是要每个Record都Call一下。
: 另外,我想挑战一下这个Dest_xxx的设计。设计估计是老印做的,他告诉我的是为了系
: 统扩容后,不同子系统使用不同的Dest_xxx表,可以减少子系统相互之间Lock。
: 如果没有了动态的Dest_xxx,Dynamic SQL 自然就不需要了。

avatar
j*g
19
这个也喜欢

【在 p****m 的大作中提到】
: 5.这个是自己绣着玩的,绣了两个打算以后自己放在家里当靠垫。这是最最容易的一个
: 。好像两天就弄出来了。我还有全新的图纸。

avatar
B*L
20
Table Source 到 Table Dest_xxx
既然Source不变,我会只create一个Dest table,但是增加一个 xxx column, xxx
column 加index
avatar
p*m
21
整理了一下手机,忽然发现自己不知不觉也弄了一堆十字绣了。发上来给大家看看吧。
大部分的十字绣都是在纯色的布上的,如果有MM喜欢样子,我可以把图发给你或者寄给
你,反正我也已经做完了。:)
1,做的最老的一个,是朋友送的。这个的图纸我可能是没有了。那时还不太在意留图纸来着。
avatar
b*g
22
CURSORs surely can be turned into queries. Validation and Data cleaning is
for each column. The way I can think of writing the query is:
=======================================================
INSERT INTO Dest_xxx (COL_A, COL_B,...)
SELECT ufn_CLEAN(COL_A), ufn_CLEAN(COL_B),...
FROM Source
WHERE ufn_VAL(COL_A)=true AND ufn_VAL(COL_B)=true AND ...
=======================================================
There is no index on COL_A, COL_B,...
The above SELECT statement is doing a full table scan. I

【在 j*****n 的大作中提到】
: Validation和Data Cleaning can be done in staging table and using queries
: instead of cursors. Most of programming in cursor can be turned to queries,
: at least in my life.
: CURSOR从编程角度看,逻辑更简单? No, that's only mean that you are not a
: complete DB guy yet... :-)
:
: 下。

avatar
p*m
23
2.第二个,买的时候以为很简单,结果大面积的衣服和人的脸,弄得我很烦。只是这个
图纸也不在了,生生给折来折去弄散了。:(
avatar
b*g
24
Will propose that to the Indian guy.

【在 B*********L 的大作中提到】
: Table Source 到 Table Dest_xxx
: 既然Source不变,我会只create一个Dest table,但是增加一个 xxx column, xxx
: column 加index

avatar
p*m
25
3.这是公公过生日给准备的礼物。装裱好后的图片找不到了。只有这么个皱皱巴巴的。
不过这个图还是挺应景的。图纸还在。就是这个用的线很多,自己可能不是特别好配?
avatar
B*g
26
任何一个query都是通过cursor实现的,如果没记错是汤姆凯特说的

column 的。 这样的话,我能想到的改写就成了这样:
吧。
loop比起来,速度上没什么优势吧。
queries

【在 b******g 的大作中提到】
: Will propose that to the Indian guy.
avatar
p*m
27
4.这个我先后做了两套,不是完全一样,不过差不太多。一套给婆婆生日,一套给爸爸
生日了。我手头现在有老爸老妈的图纸,也有老公老婆的图纸。不过这个是靠垫上的。
另,很好绣的。
avatar
j*n
28
who told you that table scan will be the same performance as cursor loop?
give a try man, i bet your query is still much faster. that's the power of
SQL engine.
btw, i still believe SSIS is the best solution for your case. these ETL
steps can be done within one single data flow task. of course, by doing so
your server's memory should be large enough...

column 的。 这样的话,我能想到的改写就成了这样:
吧。
loop比起来,速度上没什么优势吧。

【在 b******g 的大作中提到】
: Will propose that to the Indian guy.
avatar
p*m
29
5.这个是自己绣着玩的,绣了两个打算以后自己放在家里当靠垫。这是最最容易的一个
。好像两天就弄出来了。我还有全新的图纸。
avatar
b*g
30
我在另外一个Application已经做过这种改写。情况和这次类似,都是对所有的Columns
进行Validation,然后做Data Clean,导表。我当时非常希望CURSOR LOOP改写成Static
Query后速度有很大提高,然而结果却是基本没什么变化(if you wanna bet, you
still can)。
SSIS的确是我对ETL这类Application的首选工具,不过技术路线可不是我定的。

【在 j*****n 的大作中提到】
: who told you that table scan will be the same performance as cursor loop?
: give a try man, i bet your query is still much faster. that's the power of
: SQL engine.
: btw, i still believe SSIS is the best solution for your case. these ETL
: steps can be done within one single data flow task. of course, by doing so
: your server's memory should be large enough...
:
: column 的。 这样的话,我能想到的改写就成了这样:
: 吧。
: loop比起来,速度上没什么优势吧。

avatar
p*m
31
6。这个是给小外甥的靠垫。很cute。我自己还是挺喜欢的。图纸还在,就是也需要自
己配线。
avatar
b*g
32
SQL Engine是不是真这么实现Query我可不知道了。以后有机会可以挖一挖。

【在 B*****g 的大作中提到】
: 任何一个query都是通过cursor实现的,如果没记错是汤姆凯特说的
:
: column 的。 这样的话,我能想到的改写就成了这样:
: 吧。
: loop比起来,速度上没什么优势吧。
: queries

avatar
p*m
33
7。这个是我自己比较喜欢的一个图,就是白底红线。我做了来给爸妈弄回去做过年的
礼物的,讨个喜头。老人还是挺喜欢的。图纸还在。不过这个其实弄起来挺烦人的。:(
avatar
b*g
34
这个帖子的问题估计可以用CURSOR到Static Query的改写提高性能:
http://www.mitbbs.com/article_t/Database/31146499.html
不远,就在我的帖子下面一点。还有包子!

【在 j*****n 的大作中提到】
: who told you that table scan will be the same performance as cursor loop?
: give a try man, i bet your query is still much faster. that's the power of
: SQL engine.
: btw, i still believe SSIS is the best solution for your case. these ETL
: steps can be done within one single data flow task. of course, by doing so
: your server's memory should be large enough...
:
: column 的。 这样的话,我能想到的改写就成了这样:
: 吧。
: loop比起来,速度上没什么优势吧。

avatar
p*m
35
8。这是最近刚完工的一个,不过短期内也不打算开工了。这个断断续续弄了快一个月
。到后来自己都烦了。挺大的。本来决定给小外甥做礼物的,现在决定那么大的工程,
以后估计不会再做了,我留下来以后裱了放自己家里书房吧。:)对那些做大十字绣的
MM真是佩服的五体投地呀,反正我一个就够够的了。哦,这个的图纸在。如果有人愿意
绣,可以打招呼。
avatar
k*0
36
使用ROW_NUMBER function可以代替CURSOR, 一个QUERY就OK了.
给包子吧.

【在 b******g 的大作中提到】
: 这个帖子的问题估计可以用CURSOR到Static Query的改写提高性能:
: http://www.mitbbs.com/article_t/Database/31146499.html
: 不远,就在我的帖子下面一点。还有包子!

avatar
j*g
37
呀,这个很喜欢。你绣了不少啊。

【在 p****m 的大作中提到】
: 6。这个是给小外甥的靠垫。很cute。我自己还是挺喜欢的。图纸还在,就是也需要自
: 己配线。

avatar
y*w
38
re。访问query结果转换到数据库内部都是类似cursor的样子,查一下这时候表/行上的锁就更清楚了。
只是此cursor非彼cursor。坚决避免不必要的cursor编程。

【在 B*****g 的大作中提到】
: 任何一个query都是通过cursor实现的,如果没记错是汤姆凯特说的
:
: column 的。 这样的话,我能想到的改写就成了这样:
: 吧。
: loop比起来,速度上没什么优势吧。
: queries

avatar
j*g
39
这个也喜欢

【在 p****m 的大作中提到】
: 5.这个是自己绣着玩的,绣了两个打算以后自己放在家里当靠垫。这是最最容易的一个
: 。好像两天就弄出来了。我还有全新的图纸。

avatar
b*2
40
你绣了不少啊,也很漂亮,喜欢最后一幅,不过我没什么勇气绣大幅
貌似你绣完后没有清水漂洗绣布啊,所以裱完框还有些褶皱较明显
avatar
r*e
41
用过撑子后不容易熨平。我的感觉。
avatar
s*p
42
在哪买十字绣啊,我也想绣,谢谢
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。