SQL Server: индексные столбцы, используемые в select, где column1 как str1 или column2 как str2 - PullRequest
0 голосов
/ 29 октября 2018

У меня есть такая таблица:

CREATE TABLE [dbo].[MoneyTrans]
(
    [Trans_id] [nvarchar](25) NULL,
    [Amount] [nvarchar](25) NULL,
    [Currency] [nvarchar](11) NULL,
    [ExchangeRate] [nvarchar](25) NULL,
    [CorrAmount] [nvarchar](25) NULL,
    [senderName] [nvarchar](255) NULL,
    [SenderPhone] [nvarchar](20) NULL,
    [RecipientName] [nvarchar](255) NULL,
    [RecipientPhone] [nvarchar](20) NULL,
    [SenderPr] [nvarchar](5) NULL,
    [RecipientPr] [nvarchar](5) NULL,
    [Trans_Status] [nvarchar](25) NULL,
    [SendDate] [nvarchar](12) NULL,
    [Receivdate] [nvarchar](12) NULL,
    [Trans_type] [nvarchar](25) NULL
) ON [PRIMARY]

и все запросы выглядят как

SELECT * 
FROM MoneyTrans  
WHERE [senderName] = 'some one' OR [RecipientName] = 'some one'

или

SELECT * 
FROM MoneyTrans 
WHERE [SenderPhone] = '123456' OR [RecipientPhone] = '123456'

Какова лучшая стратегия индексирования?

Использовать ли индексы покрытия вот так

CREATE NONCLUSTERED INDEX [ix_MoneyTrans_NamPhon] 
ON [dbo].[MoneyTrans] ([senderName] ASC, [RecipientName] ASC) 
INCLUDE ([Trans_id], [Amount], [Currency], [ExchangeRate], [CorrAmount],
         [SenderPhone], [RecipientPhone], [SenderPr], [RecipientPr],
         [Trans_Status], [SendDate], [Receivdate], [Trans_type]) 

или просто использовать обычный некластеризованный индекс?

Надеюсь, вы можете мне помочь, большое спасибо.

...