【问题标题】:Large results set from Oracle SELECT来自 Oracle SELECT 的大型结果集
【发布时间】:2013-11-14 02:19:42
【问题描述】:

我在下面粘贴了一个针对 Oracle 数据库调用的简单语句。此结果集包含企业名称,但它有 24,000 个结果,这些结果显示在下拉列表中。

我正在寻找有关减少结果集以加快返回用户界面的数据的方法的想法,可能类似于 Google 的搜索或完全不同的想法。我对任何想法和任何方向都持开放态度。

SELECT BusinessName FROM MyTable ORDER BY BusinessName;

想法:

SELECT BusinessName FROM MyTable WHERE BusinessName LIKE "A%;

我完全了解 LIKE 子句的使用不明智,但就像我说的那样,这是一个 LARGE 结果集。也许类似于 BINARY 搜索?

【问题讨论】:

  • 只要没有前导百分比,LIKE 子句就没有错。是下拉菜单加载时间过长,还是 24,000 个名称太长而无法浏览,或者两者兼而有之?这听起来像是用户界面问题而不是数据库问题。即将所有记录加载到执行谷歌搜索类型功能的一些本地智能控件中。这是 Web 客户端还是胖客户端?
  • 如果您有业务类别、位置或类似的东西,那么相关的选择可能会更好。

标签: sql oracle plsql resultset


【解决方案1】:

最后一个查询执行得非常糟糕。数据库内的字符串比较可能非常慢,并且根据“命中”的数量,它可能会对性能造成巨大的拖累。如果那不关心你,那很好。如果公司数据未规范化到其自己的数据库表中,则尤其如此。

只要用户知道他正在查找的公司,那么我会在一些流行的 JavaScript 库中识别一个现有的 JavaScript 组件,该组件提供一个搜索文本字段和一个显示匹配结果的动态下拉列表,这将是一种有效的机制。但是,如果他们可能会查找名称的一部分,您可能想要使用 '%A%'。例如,如果我正在寻找 IBM Rational, LLC。当我搜索“Rational”时,是否希望它显示在结果中?

无论哪种方式,请注意您的表现,如果有意义,请将该数据缓存在公司查找位于数据库前面的服务器上的服务中。此外,请确保您不响应每次击键,但有 500 毫秒左右的超时时间,以允许用户在进入服务器和搜索之前输入多个字符。另外,我不建议将所有公司名称带给客户。我们一直在寻求减少从浏览器页面遍历服务器的大小和频率。当表单加载时(甚至在幕后)等待 24k 公司名称出现在客户端时,更短、更快、非常具体的查询将执行得足够好,对我来说似乎更有效。再次对其进行测试并确定最适合您的用例的性能特征。

这些是我在大数据项目中使用的技术,例如从超过 100,000 名用户中搜索用户。我们的代码是一个自定义 Dojo 小部件 (dijit),我没有看到如何直接使用 dijit 代码来实现,但 jQuery UI 提供了 autocomplete 小部件。

还可以通过文本字段对此查询使用限制,以便下拉菜单仅提供所有匹配项的子集,从而强制用户进一步细化查询。

【讨论】:

  • 我会试试这个。我正在寻找的那种建议。我将从数据库中异步提取所有结果,然后使用自动完成小部件搜索这些结果。谢谢。
  • 乐于听到结果以及您遇到的任何进一步的性能权衡决策。我已经在几个不同的领域看到了这个问题,并且不得不用不同的机制来解决它。例如,当用户不知道自己在寻找什么时,“picker”的值看起来就完全不同了。
【解决方案2】:
SELECT BusinessName FROM MyTable ORDER BY BusinessName LIMIT 10

【讨论】:

  • 是的,我知道 LIMIT,但我不想限制行数,只需减少行数,这样用户就只能看到减少的数据集。
  • limit 不是 Oracle 关键字,无论如何,这通过什么方式解决问题?
  • @ElectricLama 它减少了要显示的项目数量。这就是他要求的。
猜你喜欢
  • 2020-03-30
  • 2021-05-22
  • 1970-01-01
  • 2011-05-21
  • 2023-03-05
  • 1970-01-01
  • 2014-07-11
  • 2012-03-12
相关资源
最近更新 更多