Повысить производительность этого запроса (SQL-SERVER) - PullRequest
0 голосов
/ 16 октября 2018

Я не знаю, что еще я могу сделать, чтобы повысить скорость этого запроса.Я создал некластеризованный индекс, но результат тот же.У меня много данных, и Azure вызывает у меня некоторые проблемы с DTU.

Какой индекс вы бы порекомендовали?

SELECT 
    SUM(t.total_amount) as SumaAmount,
        COUNT(t.id) as TotalTransaccions
FROM 
    rtv_turnover_transaction as t 
    INNER JOIN tills as till ON till.ID=t.till_id
    INNER JOIN rtv_trans_articles as ta ON t.transaction_id=ta.transaction_id
    INNER JOIN articles as art ON art.id=ta.article_id
    INNER JOIN groups ON groups.id=art.group_a_id
    INNER JOIN Clients as s ON s.id=t.cliente_id
    INNER JOIN rtv_transactions as tr ON tr.id=t.transaction_id
    INNER JOIN Ubicacion as u ON t.ubicacio_id=u.id 
    INNER JOIN Operadores as o ON t.operador_id=o.ID
where 
    tr.card_num IS NULL 
    and t.trans_date >= '2018-08-01' and t.trans_date >= '2018-09-01' 

Надеюсь, вы сможете мне помочь.Я новичок с базами данных.

1 Ответ

0 голосов
/ 16 октября 2018

@ talendguy, сначала скажите нам свое требование. Для чего нужно объединить столько таблиц только для того, чтобы получить счет и сумму из одной таблицы.

Внимательно пересмотрите те таблицы, которые требуются для каждой таблицы.

Из вашего запроса выясняется, что большинство таблиц связаны с rtv_turnover_transaction.

Создать некластеризованный индекс для всех тех столбцов rtv_turnover_transaction, которые используются в условии соединения.

Вы можетеоставьте те столбцы, которые принадлежат маленькой таблице.

Если ваш запрос все еще медленный, тогда определите ограничение PK-FK relationship и Trusted Check.

Таким образом, нет необходимости создавать так много индексов. Trusted relationship help optimizer

Когда первичные и внешние ключи определены как ограничения в схеме базы данных, сервер может использовать эту информацию для создания оптимальных планов выполнения.

Дальнейшее чтение

создать отдельный Non Clustered Index on trans_date

В таблице rtv_transactions создать некластеризованный индекс для card_num

Также, если READ UNCOMMITTED Данные не являютсяпроблема или естьнет никаких шансов на READ UNCOMMITTED данные, тогда вы можете безопасно использовать WITH (NOLOCK) подсказку во всех таблицах.

rtv_turnover_transaction WITH (NOLOCK)

Примечание: я не говорю вам, чтобы вы использовали вслепую WITH (NOLOCK) подсказку, но если обстоятельства позволят вам, тоэто очень производительно.

Вы можете прочитать Benefit and Limitation of Nolock.

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