由于大量数据,Oracle SQL性能较低

时间:2014-10-29 14:18:07

标签: sql oracle oracle11g database-performance

我们的一个表有~500000个项目,因为这样的查询(带连接)的工作非常慢:

SELECT something
FROM TABLE_WITH_A_LOT_OF_DATA t
LEFT JOIN table1 t1 ON t1.id=t.t1_id
LEFT JOIN table2 t2 ON t2.id=t1.t2_id
WHERE <some complicated clause with subqueries and so on>;

此外,我们的应用程序的业务逻辑非常复杂,WHERE条款很复杂。所以问题是:what are the ways to increase performance of sql queries which search for data through tables with a lot of data?我们不是db专家,我们读到我们可以使用分区和/或物化视图。还有其他选择吗?哪一个最好?

1 个答案:

答案 0 :(得分:1)

这样的问题没有一个好的答案。如果对于良好的数据库性能有一个神奇的秘密,那么每个人都可能会使用它。此外,值得注意的是,您提到的表并不是特别大,我已经处理过数个数量级更大的表的数据库,这仍然在设计良好的数据库可以处理的范围内。 (说到这一点的意思是你不应该得出结论,只有太多的数据才能从关系数据库中获得良好的性能)。

最明显的看法是你是否拥有所需的索引。首先考虑一下缓慢执行的查询是否旨在返回少量记录。如果您要定位整个表的一小部分,那么在经常过滤的列上构建索引可能非常有效。想到这就像在书中使用索引一样,如果你必须在整本书中搜索你正在查找的每个单词(比如全表扫描)那么它会很慢。另一方面,如果您打算退回该表的大部分,例如&gt;〜15%然后索引可能不是一个好的解决方案(在某些时候,只查看每条记录而不是一直来回索引会变得更有效。

另外,不要对索引感到疯狂,添加它们会增加插入/更新的开销。

这只是一个考虑因素,但如果适合您的方案,可能是最容易获得的潜在收益。这显然是一个非常广泛的问题,因此我不会试图涵盖所有可以提高绩效的因素。