我有一个表,其中包含大约400,000+行。我正在编写一些模式匹配代码,但在此之前需要清理一列。这可以归结为做一个类似替换的操作。
我试着一次列出一个……
Update T_ADDRESS set ADDR_LINEONE = REPLACE(ADDR_LINEONE,' southeast ',' se ')
Update T_ADDRESS set ADDR_LINEONE = REPLACE(ADDR_LINEONE,' southwest ',' sw ')因为我有超过500的these...it花了太长的时间。
现在我正试着嵌套它们。
Update T_ADDRESS set ADDR_LINEONE = REPLACE(REPLACE(ADDR_LINEONE,' southwest ',' sw '),' southeast ',' se ')但这仍然缓慢得令人痛苦。我需要让这个代码在所有大小的表上工作(1条记录到500万条记录)。
有人有什么建议吗?顺便说一下,我正在使用SQL Server。
发布于 2010-09-02 23:51:36
不管你做什么替换,你都必须端到端地扫描表。这就是扼杀性能的原因,而且它不能改变,因为您必须以任何合理的方式对ADDR_LINEONE字段进行索引。
由于这应该是一次性的操作,因此长时间应该无关紧要。
如果这是一个重复的操作,那么您的问题不在这里,而是在于如何将数据加载到表中:在保存数据之前进行转换,否则您没有机会。
发布于 2010-09-02 23:49:00
编写一个CLR过程。TSQL不擅长(或设计用于)处理大量的字符串操作。
Regular Expressions Make Pattern Matching And Data Extraction Easier
发布于 2010-09-02 23:49:15
使用新值创建#TEMP表,然后进行内部连接,如下所示
create table #TempValues
(oldAres varchar(12),newadres varchar(2))
insert into #TempValues
select 'southeast','se'
union all
select 'southwest','sw'
update T_ADDRESS
set addr_lineone=t.newadres
from T_ADDRESS inner join #TempValues t on T_ADDRESS.addr_lineone=t.oldAdreshttps://stackoverflow.com/questions/3628764
复制相似问题