Как я должен индексировать свою таблицу

#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.