查询大型未索引表

时间:2014-02-18 05:55:30

标签: database

我们正在为外部应用程序开发类似Web界面的CRUD。为此,我们需要显示来自不同表的数据。有些是巨大的,非常“活着”,有很多行(数百万)。一些是小型配置表。

现在我们想让我们的用户对我们展示的网格进行过滤,细化,排序,分页等。作为用户选择的结果 - 我们正在构建选择查询。

由于显而易见的原因,对非索引字段进行过滤将产生相当长的运行查询。另一方面,索引表的每一列,看起来有点“怪异”。我们确实拥有超过50行的表格。

我们正在研究Apache Lucene,但据我所知 - 它可以帮助我们解决文本索引问题。但是数字,日期,范围呢?是否有任何解决方案,讨论可用于上述问题?

此外,我必须指出此问题仅针对UX。对于所有应用程序自己的需求,我们 good

1 个答案:

答案 0 :(得分:1)

您是正确的,一般情况下,您不希望在非索引字段上允许随机谓词,但是这有多大影响非常依赖于表大小,正在使用的数据库引擎和用于驱动数据库的计算机。对于非索引列,某些引擎并不是太糟糕,但在最坏的情况下,每个引擎都会退化为顺序扫描。顺序扫描并不像听起来那么糟糕。

一些想法

  1. 使用列存储数据库引擎进行调查,这些存储数据按列而不是按行存储,这对于非索引列上的随机谓词来说可以快得多。如果您经常需要一行中的所有字段
  2. ,则列存储不是通用解决方案
  3. 索引将由用户查询的主列,并在UX层中指示某些列上的查询将更慢。用户将更容易接受,特别是如果他们事先知道列查询会很慢
  4. 如果可能的话,只需向它扔内存。像oracle或sql / server这样的引擎会非常好,而大多数数据库都适合内存。唯一的问题是,一旦你的数据库超过内存,性能将从悬崖上掉下来(没有警告)
  5. 如果可能,请考虑使用垂直分区。这使您可以将一行拆分为2个或更多个进行存储,这可以减少谓词的IO。
  6. 当然你知道这一点,但要确保用于连接的列已编入索引。