Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 优化SQL Server查询_Sql Server - Fatal编程技术网

Sql server 优化SQL Server查询

Sql server 优化SQL Server查询,sql-server,Sql Server,是否可以优化此查询 SELECT tr.transferfrom, tr.transferto, br.id as 'BR_ID',tr.refno, br.name as 'BR_NAME', br.code as 'BRANCH_CODE', tr.docno, tr.transdate, stk.stockno,stk.salescat,tr.qty, tr.sprice,tr.qty*tr.sprice as 'GROSS_SALES' FROM

是否可以优化此查询

SELECT 
    tr.transferfrom, tr.transferto, br.id as 'BR_ID',tr.refno, 
    br.name as 'BR_NAME', br.code as 'BRANCH_CODE', tr.docno, tr.transdate,
    stk.stockno,stk.salescat,tr.qty, tr.sprice,tr.qty*tr.sprice as 'GROSS_SALES' 
FROM 
    TRANSFER tr 
JOIN 
    branch br on tr.branchid = br.id 
JOIN 
    stocks stk on tr.stockid=stk.id 
WHERE 
    RIGHT(tr.refno,7) = 'ST00576' AND LEFT(tr.refno,2) = 89 
    AND stk.stockno = 'NS4370 CR - L'; 
  • tr.refno
    创建索引,并将
    LEFT(tr.refno,2)=89
    替换为
    tr.refno,如“89%”
  • 创建综合指数
    stk.id+stk.stockno
  • 确保索引中包含
    br.id
  • 如果确实有很多记录(数亿条)并且经常执行此查询,那么将最后7个
    tr.refno
    字符存储在单独的字段中可能是有意义的,以避免
    RIGHT(tr.refno,7)='ST00576'
    (不确定sql server是否支持反向索引)
  • tr.refno
    创建索引,并将
    LEFT(tr.refno,2)=89
    替换为
    tr.refno,如“89%”
  • 创建综合指数
    stk.id+stk.stockno
  • 确保索引中包含
    br.id
  • 如果确实有很多记录(数亿条)并且经常执行此查询,那么将最后7个
    tr.refno
    字符存储在单独的字段中可能是有意义的,以避免
    RIGHT(tr.refno,7)='ST00576'
    (不确定sql server是否支持反向索引)

  • 第4点毫无意义-改为在右侧设置索引(tr.refno,7)。您将如何做到这一点?@TomTom:基于单个函数的索引有何帮助?如果我们分开了列-我们可以创建
    right\u part\u column+refno
    复合索引。谢谢你的建议,但我对SQL server索引的了解非常有限。@redcoder:到底什么还不清楚?第4点没有意义-改为在右侧设置索引(tr.refno,7)。你会怎么做,是吗?@TomTom:那么基于单个函数的索引会有什么帮助呢?如果我们有单独的列-我们可以创建
    right\u part\u column+refno
    复合索引。谢谢你的建议,但我对SQL server索引的知识非常有限。@redcoder:到底什么还不清楚?