PHP& *或特定列的SQL查询效率

时间:2015-02-04 15:47:03

标签: php sql oracle performance

我有一个Oracle数据库视图,其中我可以访问17列和大约15k行(这种增长速度大约为每年700行)。我只需要使用10列。目前我正在寻找方法使我的查询更有效率,因为我的应用程序首先加载了大约7.5k的条目。我知道我只能加载让我们说1k条目,这将是加快加载过程的一种方法;但是,用户通常需要查询超过最初加载的1k条目,我不想让他们等待第二次加载数据到应用程序。

所以我想我的主要问题是,当我查询Oracle视图时,我应该查询并只对数据库执行*查询或选择特定列?我知道最佳实践只会查询您需要的列;但是,我从性能的角度来看这个问题,通过查询我需要的10个特定列而不是查询视图,我会看到显着的性能提升吗?

1 个答案:

答案 0 :(得分:2)

正如@AndyLester所说,唯一可以确定的方法就是试试看。有理由期望指定所需的实际列集将更快。问题在于差异是否会显着?#34;这是你能告诉我们的事情。

有几个理由期待性能改进

  1. 指定实际的列集会减少必须通过网络传输的数据量,并减少客户端上消耗的内存量。这是否重要取决于您选择的列的相对大小与您要排除的列的相对大小。如果您只需要一堆varchar2(10)列,并且您不需要的列包含一些varchar2(1000)列,则可能会消除绝大多数网络流量和消耗的RAM客户端。如果您在选择一堆char(1)列时只排除了几个clob列,则减少量可能很小。
  2. 指定实际的列集可以产生更有效的计划。根据Oracle版本,视图定义和基础表的定义,当您选择列的子集时,可以消除某些连接。反过来,这可以产生更有效的计划。
  3. 指定实际的列集意味着如果向视图添加其他列,则应用程序的性能更不可能更改。您的代码不会突然开始通过网络将新数据提取到客户端的内存结构中。它可能不需要加入可能引用的其他表。
  4. 由于指定列列表没有任何缺点,因此无论性能改进的大小如何,我强烈建议这样做。但是,如果您真的关心性能,那么您可能希望更全面地考虑性能(例如,检查您的流程中实际花费的时间)。