我对SQL Server 2008表设计有一个一般性问题。我们目前有一张桌子,容量超过600GB,每天增长约3GB。该表具有适当的索引,但由于其大小而在运行查询时正成为主要的挂断。问题是我应该按年和月将表拆分为多个表(这将适合其他部门如何拆分其大数据集),还是应该利用SQL Server内置的分区。看来使用分区将需要较少的代码更改。从我在分区时读取的内容来看,您仍然仅查询一张表,服务器处理如何获取数据。如果我们使用多表路由,则必须处理从多个表中提取数据。
这是一个纯粹的学术问题,在很大程度上并没有引起问题,我只是想听听对此行为的任何解释。 取得标准的Itzik Ben-Gan交叉联接CTE理货表: USE [master] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION [dbo].[TallyTable] ( @N INT ) RETURNS TABLE WITH SCHEMABINDING AS RETURN ( WITH E1(N) AS ( SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 …
我正在使用Windows应用程序,该应用程序使用(本地)postgres数据库并将一些信息存储在临时表中。我想看一下临时表,但是pgadmin和dbVis告诉我:ERROR: cannot access temporary tables of other sessions尝试查询数据时。我尝试更改模式和表的权限,但这似乎无济于事,即使我使用与程序本身相同的用户访问数据库(至少在dbVis中也是如此)。我是否可以在数据库中更改设置,以使我能够“ root”访问数据库中的所有会话?
我需要创建一个模拟TSQL序列的存储过程。就是说,它总是在每次调用时提供递增的不同整数值。另外,如果传入一个整数,则在没有结果大于或没有下一个最大整数的情况下,应返回该值。不用说可以有多个客户端同时调用此SP。 给定具有列MetaKey varchar(max)和MeatValueLong bigInt的表MetaInfo。预期MetaKey为“ Internal-ID-Last”的行将包含分配的最后一个最大值。我创建了以下存储过程: CREATE PROCEDURE [dbo].[uspGetNextID] ( @inID bigInt ) AS BEGIN SET NOCOUNT ON; BEGIN TRANSACTION UPDATE MetaInfo WITH (ROWLOCK) SET MetaValueLong = CASE WHEN ISNULL(MetaValueLong,0) > @inID THEN MetaValueLong+1 ELSE @inID+1 END WHERE MetaKey = 'Internal-ID-Last' SELECT MetaValueLong FROM MetaInfo WHERE MetaKey = 'Internal-ID-Last' COMMIT TRANSACTION …
我认为这将是一个相当简单的问题,但实际上,我很难找到答案。 问题:您是否可以通过简单地更新分区列使其越过分区边界,将分区表中的数据行从一个分区移至另一个分区? 例如,如果我有一个带有分区键的表: CREATE TABLE SampleTable ( SampleID INT PRIMARY KEY, SampleResults VARCHAR(100) NOT NULL, ) 使用映射到主键的分区功能: CREATE PARTITION FUNCTION MyPartitionFunc (INT) AS RANGE LEFT FOR VALUES (10000, 20000); 是否可以通过将SampleID从1更改为(例如)500,000,将行从第一分区移动到第三分区? 注意:我将其标记为sql server 2005和2008,因为它们都支持分区。他们有不同的处理方式吗?