2011-02-11 62 views
0

问候溢出,多连接的性能

我需要查询具有许多/复杂空间条件的对象。 在翻译为多个连接(可能为10+)的关系数据库中。 我是新来的这个企业,想知道是否去MS SQL Server 2008 R2或Oracle 11g或基于文档的解决方案,如RavenDB或只是去一些空间数据库(GIS)...

任何想法?

问候

UPDATE:谢谢大家对你的答案。有人会选择文档/空间数据库吗?我的数据库将包含数千万到数十亿条记录。大部分是只读的。几乎没有更新,除非在输入错误的情况下。隔夜插入,并没有那么频繁。预先预测连接表,但自连接(多次连接自己的表)不是。此类查询的小页面结果将在高度互动的网站上查看,因此响应时间至关重要。任何有关如何在MS SQL Server 2008 R2或Oracle 11g上执行的预测?我还担心通过添加更多的服务器来提升性能,哪一个服务器的性能更好?如何PostgresQL?

回答

1

构建和测试。

这是知道您的想法是否可行的唯一途径。有免费版本的Oracle,SQL Server和Teradata可供下载。 PostgreSQL是免费的,期间。

数据库设计帮助可能不是免费的。 SQL性能比其他单一原因更糟糕的设计。

我做了一个测试(概念验证)昨天(在我脑海中一起运行)20个50万行的表,自然键(没有id号),20个左连接,中位访问时间40毫秒。使用具有慢速磁盘和2个RAM的商用台式计算机。


编辑:似乎也有一个free, single-server version of Greenplum是唯一的约束两个CPU插槽,对CPU内核没有任何限制。对数据库大小也没有限制。我感觉需要玩几TB。

2

在实际应用中对一组表进行10+次连接的情况比您想象的要普遍得多。内部连接和外部连接的影响会有所不同,但我不会过分担心,除非您外部连接的数据量变得非常大。数据库针对处理集进行了优化。

示例:

就在昨天,我写了一个查询,执行13个内部联接。它在不到一秒的时间内执行了50,000多条记录。

1

一致认为,与查询数据量相关联的问题并不多。尽管我承认在使用MS SQL Server 2005,MS SQL Server 2008 R2和ORACLE 10g和11g的环境中工作,但似乎我们的MS SQL数据库在运行大型查询时稍微更容易出现死锁。

1

您的问题中最大的一个未知数是SQL和类似SQL语句的动态性如何,谓词中的值多久更改一次?他们是否使用绑定参数而不是内联值(他们应尽可能)。如果有很多重用的机会,Oracle将是我的选择。

无论SQL的复杂性如何,Oracle都有一系列可以提供帮助的功能。物化视图和SQL重写可以在轻度老化结果可接受实时结果的情况下提供强大的性能优势。另外还有11g来自结果集缓存。

一旦数据库选择了一个优化计划,它就不是那么重要的连接数量,因为这些特定的连接对数据库的调优程度如何。索引,最新的统计数据和物化视图可能至关重要。

1

MS SQL Server 2008 R2和ORACLE 11g都应该能够毫无困难地处理这些问题。就可扩展性而言,我会在RAC环境中推荐Oracle 11g。您也可以使用MS SQL Server 2008 R2进行Microsoft集群,但根据我的经验,Oracle的RAC是更稳固的解决方案。

与此同时,您计划在数据库中使用的应用程序也应在决策中发挥作用。如果您将使用MS SharePoint或其他MS应用程序,那么MS SQL Server 2008 R2可能是更好的解决方案。

在PostgreSQL方面,我没有多少经验,但我听说过在企业环境和大型商业环境中使用过它的人的噩梦故事。从我所知道的来看,它不是完全可扩展性友好的。就我个人而言,如果您正在寻找一个开源解决方案,我认为MySQL会是一个更好的解决方案,但是要记住开源SQL解决方案并不是最容易实现的可伸缩性或高可用性环境,如果这是您的终极目标目标。