#sql #sql-server #performance #sql-server-2008 #indexing
#sql #sql-сервер #Производительность #sql-server-2008 #индексирование
Вопрос:
У меня есть этот запрос :
select distinct
be.sk_loan_id,
be.deal_id,
val.amount as rest_balance,
lo.value_date as effective_start_date,
lo.maturity_date as effective_maturity_date,
lo.currency_id as currency,
'0' as process_status,
sub.char_cust_element1 as installment_date,
sub.char_cust_element2 as installment_type,
sub.char_cust_element5 as rest_balance_freq,
lo.repayment_principal_freq,
lo.next_principal_sch_date,
lo.next_interest_sch_date,
lo.repayment_interest_freq,
lo.interest_basis,
lo.interest_rate,
lo.base_rate,
s.amount as principal_amount,
isnull(prevVal.prev_amount_change, 0) as prev_amount_change
from
t_trn_loan_business_event be
inner join
t_trn_loan lo on be.sk_loan_id = lo.sk_id
inner join
t_trn_loan_valuation val on lo.sk_id = val.sk_loan_id
inner join
t_deal_subtype sub on lo.deal_subtype = sub.deal_subtype
inner join
t_trn_loan_schedule s on be.deal_id = s.deal_id
and s.amount_type <> 'INT'
and '2012-1-1' between s.start_validity_date and s.schedule_end_date
left join
(select
sk_loan_id,
sum(case when v.sk_loan_valuation_type = 24 then amount else -amount end) as prev_amount_change
from
t_trn_loan_valuation v
where
v.sk_loan_valuation_type in (24, 27)
and v.sk_time_id < 4384
group by
sk_loan_id) prevVal on be.sk_loan_id = prevVal.sk_loan_id
where
be.sk_business_event_type_id in (17, 18, 7, 3, 8, 14, 19, 20)
and val.sk_loan_valuation_type = 25
and be.sk_time_id = 4384
and process_flag1 = '0'
Я хочу повысить производительность этого запроса. Какие столбцы я должен поместить в индекс, чтобы обеспечить наилучшую производительность? Тем не менее, я также вставляю большой объем данных в t_trn_loan_business_event
и t_trn_loan valuation
.
Например, в таблице t_trn_loan_valuation
прямо сейчас у меня есть 3 индекса:
sk_loan_id
(кластеризованный)sk_loan_valuation_type
sk_time id
Должен ли я использовать некластеризованный индекс для столбца sk_loan_id
? Или я должен поместить их в 1 index ( sk_loan_id, sk_valuation_type, sk_time_id
)?
Если да, должен ли я сделать ее кластеризованной или некластеризованной?
Спасибо,
Комментарии:
1. КАКАЯ конкретная база данных? Индексация сильно зависит от поставщика и варьируется от продукта базы данных к другому. Пожалуйста, обновите свои теги соответствующим продуктом базы данных, например
mysql
,sql-server
,oracle
,postgresql
или что-то еще, что вы используете2. Извините, я думал, что это будет одинаково для любого поставщика баз данных. Я использую SQL Server 2008.