TSQL IN против использования Where с> = и <= - PullRequest
0 голосов
/ 07 апреля 2019

У меня более 10 таблиц фактов. Каждый из них имеет неуникальный кластеризованный индекс Id_Config_table. Каждая вставка данных, идентификатор из Config_Table присваивается таблице фактов. Каждый Id_Config_table содержит около 1-1,5 миллиона строк данных.

Config_Table

+----+-----------+----------+
| 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 - 1,5 миллиона строк данных для каждого Id_Config_table.

Теперь я планирую добавить новый столбец Date в формате int и сделать его новым кластеризованным индексом. Я не могу удалить столбец 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

Улучшит ли это производительность запроса, если я использую второй запрос, используя новый индекс?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...