y*****n 发帖数: 11251 | 1 最近在改一个不知多少年前的query,用了一个IN (,)。结果遇上一个几千条的list,
直接把sql server干掉了。决定改成temp table做inner join。那个list是作为参数传
过来的,中间
用,分开。如果用charindex一个一个断开做insert,效率怎么样啊? 会不会做split
的时候也把sql server搞得忙死? |
y****w 发帖数: 3747 | 2 一个用charindex循环sql就拆好了,记得一定给临时表加个索引。效率肯定没问题。
split
【在 y*****n 的大作中提到】 : 最近在改一个不知多少年前的query,用了一个IN (,)。结果遇上一个几千条的list, : 直接把sql server干掉了。决定改成temp table做inner join。那个list是作为参数传 : 过来的,中间 : 用,分开。如果用charindex一个一个断开做insert,效率怎么样啊? 会不会做split : 的时候也把sql server搞得忙死?
|
y*****n 发帖数: 11251 | 3 temp table就一个列也要加index?还是temp table超过一定大小再加?
【在 y****w 的大作中提到】 : 一个用charindex循环sql就拆好了,记得一定给临时表加个索引。效率肯定没问题。 : : split
|
y****w 发帖数: 3747 | 4 把丫想象成array,你一定想要个index的。给temp加index没太大
好处的情况会有,但能把情况搞糟糕的几乎没有。
【在 y*****n 的大作中提到】 : temp table就一个列也要加index?还是temp table超过一定大小再加?
|
i****a 发帖数: 36252 | 5 pre-split before inserting into temp table 會不會好點
【在 y*****n 的大作中提到】 : temp table就一个列也要加index?还是temp table超过一定大小再加?
|
B*****g 发帖数: 34098 | 6 咱公司的java developer最喜欢干这个
【在 y****w 的大作中提到】 : 把丫想象成array,你一定想要个index的。给temp加index没太大 : 好处的情况会有,但能把情况搞糟糕的几乎没有。
|
y*****n 发帖数: 11251 | 7 把split做成一个function了,return table variable,然后再insert into temp
【在 i****a 的大作中提到】 : pre-split before inserting into temp table 會不會好點
|
g***l 发帖数: 18555 | 8 FUNCTION是ROW LEVEL的,比较慢的 |
B*****g 发帖数: 34098 | 9 没有control吗?oracle应该可以control
【在 g***l 的大作中提到】 : FUNCTION是ROW LEVEL的,比较慢的
|
y****w 发帖数: 3747 | 10 他这个不是针对一个表的字串,每次用都是一次性的.
他关心的是返回临时表的效率.
【在 g***l 的大作中提到】 : FUNCTION是ROW LEVEL的,比较慢的
|
|
|
y*****n 发帖数: 11251 | 11 对。临时表最多时候可能有几千条,要和一个表join,那个表几百万条吧。不过同时还
有别的进程做CRUD。
【在 y****w 的大作中提到】 : 他这个不是针对一个表的字串,每次用都是一次性的. : 他关心的是返回临时表的效率.
|
u*********e 发帖数: 9616 | 12 that's what we did here.
【在 y*****n 的大作中提到】 : 把split做成一个function了,return table variable,然后再insert into temp
|
gy 发帖数: 620 | 13 This is so far the most efficient splitter from Jeff Moden:
http://www.sqlservercentral.com/articles/Tally+Table/72993/ |
gy 发帖数: 620 | 14 No need "再insert into temp" if you use Jeff's splitter function -- it is
TVF.
【在 y*****n 的大作中提到】 : 把split做成一个function了,return table variable,然后再insert into temp
|
gy 发帖数: 620 | |
y****w 发帖数: 3747 | 16 lz这个split只处理几千条,clr function快100倍也省不了1s的。 后面这几千条和那
个大表join才是关键。 索引,索引,还是索引。
【在 gy 的大作中提到】 : Paul White has a CLR splitter outperform TSQL splitter: : http://www.sqlservercentral.com/Forums/Topic1101315-203-14.aspx
|
y*****n 发帖数: 11251 | 17 今天刚有反馈回来,说现在要将近10万条了。。不知道他们在搞什么。
【在 y****w 的大作中提到】 : lz这个split只处理几千条,clr function快100倍也省不了1s的。 后面这几千条和那 : 个大表join才是关键。 索引,索引,还是索引。
|
B*****g 发帖数: 34098 | 18 1 month?
【在 y*****n 的大作中提到】 : 今天刚有反馈回来,说现在要将近10万条了。。不知道他们在搞什么。
|
g***l 发帖数: 18555 | 19 支持这个,先准备好了,一次性插入避免其它的操作
【在 i****a 的大作中提到】 : pre-split before inserting into temp table 會不會好點
|
y*****n 发帖数: 11251 | 20 是啊。大概是sku的分组。每次都建新的,拒绝reuse
【在 B*****g 的大作中提到】 : 1 month?
|