Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用sql忽略表的一部分_Sql_Sql Server 2008 R2 - Fatal编程技术网

如何使用sql忽略表的一部分

如何使用sql忽略表的一部分,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,我有一个SQL表,orders表中有500000条记录。 sql已经使用了5年,每年大约有100000条记录添加到数据库中。 该表大约有30个字段,其中一个字段是OrderDate 查询只需要最近几个月的记录,最长为过去12个月。 因此,之前的所有记录都是无用的,会减慢所有查询的速度 查询速度很慢,需要3-4秒,几年前几乎是直接查询。 我必须一次加载并打印所有字段列。 我可以让SQL忽略而不查看部分记录吗?假设OrderDate在2013年之前的记录,或者是前400000条记录,或者忽略某些记录

我有一个SQL表,orders表中有500000条记录。 sql已经使用了5年,每年大约有100000条记录添加到数据库中。 该表大约有30个字段,其中一个字段是OrderDate 查询只需要最近几个月的记录,最长为过去12个月。 因此,之前的所有记录都是无用的,会减慢所有查询的速度

查询速度很慢,需要3-4秒,几年前几乎是直接查询。 我必须一次加载并打印所有字段列。
我可以让SQL忽略而不查看部分记录吗?假设OrderDate在2013年之前的记录,或者是前400000条记录,或者忽略某些记录而不删除它们?

据我所知,您有两个选项:


创建一个与旧表相同的新表,并在其中插入要忽略的行,然后从原始表中删除这些相同的行。如果这些行对每个查询都无用,并且如果可行,您可以更新使用这些行的其他查询,那么这种解决方案是很好的

为列编制索引


这是表分区的经典用法,但我们不知道您使用的是哪种类型的SQL,所以我们不知道它是否支持它。是否为SQL Server的版本添加标记?Oracle?

使用where子句筛选数据我建议您首先为列编制索引,还可以创建一个视图,以便更容易地选择您的记录您编写此表时是否觉得只有一个查询?是真的还是不可能?或者所有查询都需要忽略旧记录吗?表上的索引是什么?主键?其他类型的查询?其他可能影响性能的因素,如负载增加?相对于可用服务器内存的数据库总大小?听起来好像表上没有任何索引,当添加适当的索引时,速度问题就会消失,您不必担心这一点,忽略表中的一部分内容。如果这些行对每个查询都没有用,这个解决方案很好。好吧,如果真是这样的话,我们可以直接删除无用的行,而不必考虑第二个表。我知道这些天是谁扔掉了甚至无用的数据?另一个解决方案是创建一个表来保存历史。然后,可能使用作业插入您不使用的记录,并从工作表中删除。卡尔,也许这对办公室的日常任务没有用,但可能对其他部门没有用。无论哪种方式,您都可能因为删除旧数据而被解雇,特别是如果它来自我添加的order table,2008 R2,如果它是enterprise edition,那么您可以使用表分区。我不知道这是不是一个企业版。不,这是一个版本。搜索“查找sql server版本”。您可能没有企业版-它很昂贵。Web版64位-这意味着我将无法进行分区?