我有一张包含大量列和大量数据的大表。
以下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 ) )
非常感谢您对示例/网址的任何帮助。
提前致谢。
答案 0 :(得分:0)
您无法更改当前表,但可以添加新表吗?
如果您的问题与丢失的索引有关,您只需将数据复制到新表中 - 这里的价格就是重复 - 并调整您的SQL以使用此表而不是原始表。您只需复制数据并允许SQL Server创建和维护新索引。
这个想法是只复制索引中包含的数据。除了重复之外,此处的价格可能更“加入”,但根据您的问题,这不是问题,因为只有当您的查询执行得非常好时才加入本身。