【问题标题】:Any ideas on why this query would run so slow?关于为什么这个查询会运行这么慢的任何想法?
【发布时间】:2016-12-19 07:08:43
【问题描述】:
  1. 查询一--索引查找

    SELECT P.Date_Send_Ins,C.* 
    FROM DATABASE1..TABLE1 P  WITH (FORCESEEK) JOIN DATABASE2..TABLE2 C   ON P.COLUMN1  = C.COLUMN1  AND P.COLUMN2 =    C.COLUMN2 
    WHERE    LEFT(C.COLUMN3 ,7) LIKE 'YYYY/MM' and LEFT(P.COLUMN3 ,2) = 'YS'
    
  2. 查询二

    SELECT P.Date_Send_Ins,C.*
    FROM DATABASE1..TABLE1 P   JOIN DATABASE2..TABLE2 C   ON P.COLUMN1  = C.COLUMN1  AND P.COLUMN2 = C.COLUMN2 
    WHERE    LEFT(C.COLUMN3 ,7) LIKE 'YYYY/MM' and LEFT(P.COLUMN3 ,2) = 'YS'
    
  3. 查询三--index seek

    SELECT P.Date_Send_Ins,C.* 
    FROM DATABASE1..TABLE1 P   JOIN DATABASE2..TABLE2 C   ON P.COLUMN1  = C.COLUMN1  AND P.COLUMN2 = C.COLUMN2 
    WHERE    LEFT(C.COLUMN3 ,7) LIKE 'YYYY/MM' and  P.Date_Send_Ins LIKE 'YS%'
    

在sql server中查询一和三很快,但是查询二太慢了,结果没有出现。

在另一台服务器上,它们都很快,我运行sp_updatestats,但这并没有更好。

如何解决这个问题?

【问题讨论】:

  • DATABASE1..TABLE1 上有哪些索引?
  • 错误索引减慢了查询速度。当我禁用索引时问题解决了。谢谢

标签: sql sql-server database-administration sqlperformance


【解决方案1】:

避免在 where 子句中的任何表列上使用函数。几乎总是一个性能问题。例如,不要使用 LEFT()

SELECT P.Date_Send_Ins,C.* 
FROM DATABASE1..TABLE1 P  
JOIN DATABASE2..TABLE2 C   ON P.COLUMN1  = C.COLUMN1  AND P.COLUMN2 = C.COLUMN2 
WHERE  C.COLUMN3 LIKE 'YYYY/MM%' 
and P.COLUMN3 = 'YS%'

【讨论】:

  • 我不使用这个功能,但是其他用户使用它,我是DBA,我必须控制SQL Server的性能。
  • 好的,但是让这些用户知道如何避免 where 子句中的数据函数....这也会对您有所帮助
  • 太棒了!所以你有想要的答案吗?如果这是真的,那么请接受Someone Answers
  • 是的,我知道,但我的问题通过禁用索引解决了,我同意你在列上的功能阻止使用索引,我告诉他们
猜你喜欢
  • 2011-10-18
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 2020-03-19
  • 2014-03-12
  • 2011-02-28
  • 1970-01-01
相关资源
最近更新 更多