查询执行需要更多时间

Posted

技术标签:

【中文标题】查询执行需要更多时间【英文标题】: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 列跨度> 【参考方案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;

【讨论】:

谢谢。不过这也需要一些时间。

以上是关于查询执行需要更多时间的主要内容,如果未能解决你的问题,请参考以下文章

查询执行需要更多时间

pl sql查询需要更多时间来执行

在 oracle 中,具有多个连接的查询执行需要更多时间

使用 distinct 和 top 子句执行查询需要更多时间

SQL 查询比平时花费更多时间

sql查询需要时间,因为我正在查看三个表