提高此查询的性能(SQL-SERVER)

提高此查询的性能(SQL-SERVER),sql-server,select,sum,Sql Server,Select,Sum,我不知道我还能做些什么来提高这个查询的速度。我创建了非聚集索引,但结果是一样的。我有很多数据,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

我不知道我还能做些什么来提高这个查询的速度。我创建了非聚集索引,但结果是一样的。我有很多数据,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' 

希望你能帮助我。我是数据库新手。

@talendguy,首先告诉我们您的要求。为什么需要加入这么多表才能从一个表中获得计数和总和

仔细修改每个表格所需的内容

从您的查询中可以看出,大多数表都与
rtv\u交易相关

在连接条件中使用的rtv\u事务的所有列上创建非聚集索引

您可以保留属于小表的列

rtv_turnover_transaction WITH (NOLOCK)
如果查询仍然缓慢,则定义
PK-FK关系
可信检查
约束

这样就不需要创建这么多索引。
信任关系
帮助Optimizer

将主键和外键定义为中的约束时 数据库模式,服务器可以使用该信息创建最佳 执行计划

在交易日创建单独的
非聚集索引

在表
rtv\u事务中
card\u num上创建非聚集索引

此外,如果
读取未提交的
数据不是问题,或者
读取未提交的
数据的可能性不大,则您可以在所有表中安全地使用
和(NOLOCK)
提示

rtv_turnover_transaction WITH (NOLOCK)
注意:我并不是告诉您盲目地使用
和(NOLOCK)
提示,但是如果环境允许,那么它是非常有效的


您可以阅读Nolock的优点和限制

您有哪些索引(既有聚集的,也有非聚集的)?请也包括他们的DDL。你能上传一个实际的执行计划到这个网站吗?这将有助于向我们提供查询计划的输出:您可能需要检查WHERE子句:
和t.trans_date>=“2018-08-01”和t.trans_date>=“2018-09-01”
为什么需要所有这些连接?我认为where子句是拼写错误。FK如何否定索引的需要?这是错误的。你为什么建议他们使用NOLOCK?这只是一个糟糕的建议,特别是对于一个似乎在处理某种货币的系统来说。这个提示不是没有成本的性能工具。它可以并且将随机返回丢失和/或重复的行以及大量其他“功能”。稍后我会回答关于FK否定索引的需要,因为解释需要时间。我从来没有说过要立即使用(NOLOCK)。请仔细阅读我的陈述。NOLOCK并不总是坏的,在某些情况下它可以非常安全地使用。NOLOCK有时非常有用。而且,当你关心结果的准确性时,永远不会。你建议使用它,但没有提供任何关于它有多糟糕的警告。发布的索引是完全错误的。也许是语言障碍,但它的阅读方式是不正确的。