首页 > 解决方案 > TSQL IN 与使用 Where with >= 和 <=

问题描述

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

配置表

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

上表中的日期没有排序,它是按 Id 排序的。

我的事实表如下所示:

Fact_Table_1

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

Fact_Table_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这就是我需要使用子查询的原因。我的事实表包含 1 到 150 万行数据Id_Config_table

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

Fact_Table_new

+------+---------------+-----------------+----------+
| 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

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

标签: sql-servertsql

解决方案


推荐阅读