【问题标题】:query execution taking more time查询执行需要更多时间
【发布时间】:2018-10-04 07:52:39
【问题描述】:

下面的查询需要十四秒才能给出结果。有没有办法优化这个查询。

SELECT DISTINCT L.F_T_CODE AS F_T_CODE, PHT.F_PHRAS AS F_PHRAS FROM PHRASE_LINK L 
INNER JOIN PHRAS_TR PHT  ON L.F_P_ID = PHT.F_P_ID 
WHERE  PHT.F_PHRAS LIKE '%a%' 
AND PHT.F_LAN = 'EN' AND L.F_D_CODE != L.F_T_CODE ORDER BY PHT.F_PHRAS
OFFSET 100000 ROWS FETCH NEXT 10 ROWS ONLY;

【问题讨论】:

  • 您的WHERE 子句有LIKE '%a%',它不适用于索引。您可以尝试索引连接列,但我什至不确定 SQL Server 会选择使用它们。所以,我看不出有什么方法可以加快您的查询速度。
  • 在不知道表定义、索引等的情况下很难给出任何建议。请补充
  • 索引适用于 PHT.F_P_ID 但不适用于 L.F_P_ID on Join 条件索引适用于 PHT.F_PHRAS 列,类似运算符索引适用于 L.F_D_CODE 和 L.F_T_Code 列跨度>

标签: sql-server query-optimization


【解决方案1】:

在同一张表上使用 INNER JOIN 尝试以下查询:

SELECT DISTINCT L.F_T_CODE AS F_T_CODE, PHT.F_PHRAS AS F_PHRAS 
FROM PHRASE_LINK L
INNER JOIN PHRASE_LINK L1 ON L.F_D_CODE != L1.F_T_CODE
INNER JOIN PHRAS_TR PHT  ON L.F_P_ID = PHT.F_P_ID 
WHERE  PHT.F_PHRAS LIKE '%a%' `enter code here`
AND PHT.F_LAN = 'EN'  ORDER BY PHT.F_PHRAS
OFFSET 100000 ROWS FETCH NEXT 10 ROWS ONLY;

【讨论】:

  • 谢谢。不过这也需要一些时间。
猜你喜欢
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多