У меня более 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
Улучшит ли это производительность запроса, если я использую второй запрос, используя новый индекс?