如何在T-SQL中优化多表排序的连接?

RMo*_*sey 4 sql t-sql sql-server sql-server-2005 query-optimization

如何优化以下查询?

   SELECT TOP 50 *
     FROM A 
LEFT JOIN B ON A.b_id = B.id 
 ORDER BY A.number, B.name DESC
Run Code Online (Sandbox Code Playgroud)

我在(A.number asc,A.creation_date desc)上创建了一个非聚集索引,其中包括A中的所有列,以及B.origination_date desc上的另一个非聚集索引,其中包括B中的所有列(文本列除外) .根据SQL Server Management Studio的实际执行计划,这两个索引都没有使用.

似乎导致性能下降的是B.origination_date排序.当我在SQL Server Management Studio中检查实际执行计划时,我发现这三个字段中的"Top N Sort"占用了91%的执行时间.如果我在B.origination_date上删除排序,则查询几乎立即完成,使用A上的索引.

编辑: 更新了查询以提供更好,更简单的示例.

HLG*_*GEM 5

我猜A.number就像'%%'是你的问题.这是打算做什么的?如果要使用索引,则不应使用带通配符的like作为第一个字符.因为这看起来似乎是没有任何过滤,因为通配符之间没有任何东西.