使用 SQL Server 2005。
我正在执行一个没有 where 子句的巨大 DELETE FROM。它基本上等同于 TRUNCATE TABLE 语句 - 除了我不允许使用 TRUNCATE。问题是表很大 - 1000 万行,需要一个多小时才能完成。有没有办法让它更快,没有:
t-log 已经在一个单独的磁盘上。
欢迎任何建议!
我的数据库设置了我们所说的临时表和活动表。目前,我们有大约 200 万行用于名为 products 的表。我们称为制造商的客户将他们的数据加载到临时表中,当他们完成更新、添加、删除数据时,我们会将这些数据推送到我们的实时表中。
这些实时表格为移动应用程序和网站提供网络服务。将数据从 staging 推送到 live 包括删除 live 表中的所有数据和插入 staging 表中的所有数据。所有这些都由ManufacturerID存在于每个表中的一个名为的列分隔。
有些制造商有 500 种产品,有些制造商有 75,000 种产品。基于这一点,我们有时会因为对所有 200 万条记录进行分页而导致 Web 服务响应非常缓慢。从实时表中删除数据似乎也变得非常缓慢。
通过ManufacturerID帮助这种情况来分区我的产品表吗?从我读到的内容来看,这基本上意味着当我查询我的产品时,我只会查询数据库的一小部分,ManufacturerID因此整体响应时间有了巨大的改善。
是否可以在单个语句中将所有分区从一个分区表切换到一个临时表?
我想从 SQL Server 2012 数据库中的表中删除分区。表有主键,但分区列不是主键。我还想保持数据结构和模式完好无损。
我试过:
select *
into [dbo].[new_Non_partitioned_Table]
from [dbo].[partitioned_table]
Run Code Online (Sandbox Code Playgroud)
然后我删除了分区表并重命名了新表。但是,它导致我丢失了数据结构和一些迫使我放弃约束的依赖项 (FK)。这是用于生产和数据丢失不是一种选择。
有没有更好的方法从现有表中删除分区?