2015-01-16 42 views
0

我有一个sp,它必须从8个表中选择数据,每个select查询都有很多'where子句',每个表有数千行数据。哪种方法更适合提高存储过程的性能

现在,要求是提高这个sp的性能。 下面提到的方法被提出,并分别我的问题他们都提到如下:

  1. 创建也会经常存储要求的数据其他几个表(例如:本年度),所以使用这些表本年度数据,被问到50%的时间。并使用本年度以外的原始表格。由于这会限制数据,因此我们预计会提高性能。 所以我的问题是:这会导致性能的实质性改善吗?因为无论如何,子句还会限制要选择的数据。或者如何减少提供给sql的数据与性能相关
  2. 基于年份在现有表上创建分区。 我不知道这些分区是如何工作的。所以如果任何人都可以对此有所了解,那将不胜感激。
+1

mysql和sql server是不同的野兽,编辑你的标签。 – Mihai

+0

您需要在图片和日常工作中引入ETL来安排它们。 – SouravA

+0

@Sourav_Agasti:感谢您的意见,但这是我的约束,只能使用这个sp和现有的db。我不能只为这个要求引入ETL – Onki

回答

0

选项1本质上是无用的,因为您必须编写大量的代码来决定使用哪个表。

选项2:PARTITIONing很少改进您从INDEX获得的性能。

所以,选项3:我们来看一个典型的查询和SHOW CREATE TABLEs。然后让我们看看我们是否可以优化查询。这可能与将日期时间放在一些现有索引的末尾一样简单。

相关问题