选择查询需要很长时间执行 - 查询优化

Posted

技术标签:

【中文标题】选择查询需要很长时间执行 - 查询优化【英文标题】:Select query taking much time to execute - query optimisation 【发布时间】:2015-07-30 08:56:33 【问题描述】:

我有一个名为 cps_case_history 的表,其中有一列名为 'Notes' 的数据类型为 Varchar2 (1800 Char)

我需要从 cps_case_history 表中获取 10 到 15 条记录,其中 Notes like 'ACCOUNT TFR TO UFSS'

我使用了以下两个查询,但执行时间太长,谁能建议一种优化以下查询的方法,以便我可以快速获取 10 或 15 条记录

第一个查询:

Select * from cps_case_history where 
 (dbms_lob.instr(notes, 'ACCOUNT TFR TO UFSS') > 1) 

第二个查询:

 select * from cps_case_history where 
 notes like '%ACCOUNT TFR TO UFSS%'

提前致谢。

【问题讨论】:

Oracle(plsql) 还是 sql-server??.. 好像是 Oracle 您为什么在varchar2 列上使用dbms_lob?第二个查询似乎很好。需要多长时间?您在Notes 列上有任何索引吗? 我没有为该列定义任何索引。当我尝试长时间(以小时为单位)执行它而没有任何响应时..有什么解决方案 【参考方案1】:

顾名思义,它是历史表 cps_case_history。所以这张表可能包含大量数据。为了快速获得查询结果,这个表应该有分区或索引。

【讨论】:

是的,它的历史表有着巨大的记录。但表没有任何分区或索引.. 有什么办法可以得到 10 到 15 条记录【参考方案2】:

如果您想要该表中的任何 10-15 条记录,您可以使用 TOP

select Top 15 * from cps_case_history 
         where notes like '%ACCOUNT TFR TO UFSS%' ;     

【讨论】:

以上是关于选择查询需要很长时间执行 - 查询优化的主要内容,如果未能解决你的问题,请参考以下文章

Sql Server 查询优化技巧

MySQL 查询/表需要优化

尽管成本低、基数低,但 Oracle 中的选择查询需要很长时间

在 MYSQL 表上选择查询需要很长时间并超时

需要优化SQL查询的帮助

优化长时间运行的 SQL Server 查询