TSQL IN与在> =和<=中使用Where

时间:2019-04-07 06:51:08

标签: sql-server tsql

我有10多个事实表。他们每个人都有一个非唯一的聚集索引Id_Config_table。每个数据插入(来自Config_Table的ID)都分配给事实表。每个Id_Config_table包含大约1-150万行数据。

Config_Table

+----+-----------+----------+
| Id | FactTbl   | Date     |
+----+-----------+----------+
| 1  | FactTbl_1 | 20190101 |
| 2  | FactTbl_2 | 20190101 |
| 3  | FactTbl_1 | 20190101 |
| 4  | FactTbl_2 | 20190102 |
+----+-----------+----------+

日期未在上表中排序,而是按ID排序。

我的事实表如下:

事实表_1

+------+---------------+-----------------+
| Col1 | few_more_cols | Id_Config_table |
+------+---------------+-----------------+
| ..   | ..            | 1               |
+------+---------------+-----------------+
| ..   | ..            | 3               |
+------+---------------+-----------------+

事实表_2

+------+---------------+-----------------+
| Col1 | few_more_cols | Id_Config_table |
+------+---------------+-----------------+
| ..   | ..            | 2               |
+------+---------------+-----------------+
| ..   | ..            | 4               |
+------+---------------+-----------------+

当前,我正在使用以下查询:

Select 
    col1,
    few_more_cols 
from 
    Fact_Table_1
Where 
    Id_Config_table IN (Select Id  
                        from Config_Table 
                        where Date >= 20190101 and Date <= 20190331)

注意:Fact_Table_1或Fact_Table_2中的数据使用Id_Config_table排序,而不是使用Date排序,这就是为什么我需要使用子查询的原因。我的事实表每个Id_Config_table包含1-150万行数据。

现在,我打算添加一个新列,它是int格式的Date,并使其成为新的聚集索引。我无法删除Id_Config_table列,因为它已在其他地方使用。

事实表_新

+------+---------------+-----------------+----------+
| Col1 | few_more_cols | Id_Config_table | Date     |
+------+---------------+-----------------+----------+
| ..   | ..            | 8               | 20190101 |
| ..   | ..            | 7               | 20190102 |
| ..   | ..            | 1               | 20190103 |
+------+---------------+-----------------+----------+

在这种情况下,数据将按日期排序。我现在可以删除子查询

Select 
    col1, few_more_cols 
from 
    Fact_Table_1
Where 
    Date >= 20190101 AND Date <= 20190331

如果我使用新索引使用第二个查询,是否会提高查询性能?

0 个答案:

没有答案