首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL调优思想

SQL调优思想
EN

Stack Overflow用户
提问于 2014-09-08 23:04:16
回答 1查看 79关注 0票数 0

我有一个有很多列和大量数据的大表。

以下hibernate (3.x) SQL在Oracle 11g数据库中花费了很长时间。响应时间较慢的主要原因是where子句中的非索引列。

经过数据库分析,决定如下:

  • 此时无法修改数据库表以将索引添加到查询中使用的非索引列中。
  • 此外,使数据库函数/存储过程的SQL部分也不是一个选项。
  • 数据库优化已经完成。
  • 必须对SQL进行优化。

如何调优/优化SQL以获得更快的响应时间?嵌套联接会增加响应时间吗?

下面是SQL:

代码语言:javascript
复制
SELECT *
FROM emp
WHERE id || '/' || name IN ( :vals )
    AND (LEAST(DECODE(dt1, 0, 999999999999, null, 999999999999, dt1)
              ,DECODE(dt2, 0,999999999999, null, 999999999999, dt2)) BETWEEN :inputVal1 AND :inputVal2
    OR ( decode(dt1, 0, null, dt1) IS NULL
        AND DECODE(dt2, 0,null, dt2) IS NULL )  )

对示例/urls的任何帮助都将受到高度赞赏。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-09-09 12:55:47

不能更改当前表,但可以添加新表吗?

如果您的问题涉及缺少的索引,您只需将数据复制到新表(这里的代价是复制),并调优您的SQL以使用此表而不是原始表。您只需复制数据,并允许SQL server创建和维护新索引。

其想法是只复制索引中包含的数据。除了复制之外,这里的代价可能更多地是“加入”,但根据您的问题,这不是问题,因为只有当查询执行得很好时,加入本身才是问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25734366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档