我有一个有很多列和大量数据的大表。
以下hibernate (3.x) SQL在Oracle 11g数据库中花费了很长时间。响应时间较慢的主要原因是where子句中的非索引列。
经过数据库分析,决定如下:
如何调优/优化SQL以获得更快的响应时间?嵌套联接会增加响应时间吗?
下面是SQL:
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的任何帮助都将受到高度赞赏。
提前谢谢。
发布于 2014-09-09 12:55:47
不能更改当前表,但可以添加新表吗?
如果您的问题涉及缺少的索引,您只需将数据复制到新表(这里的代价是复制),并调优您的SQL以使用此表而不是原始表。您只需复制数据,并允许SQL server创建和维护新索引。
其想法是只复制索引中包含的数据。除了复制之外,这里的代价可能更多地是“加入”,但根据您的问题,这不是问题,因为只有当查询执行得很好时,加入本身才是问题。
https://stackoverflow.com/questions/25734366
复制相似问题