首页 > 解决方案 > 加载表中每一列的 DISTINCT 值的最佳实践,用作过滤器

问题描述

我在网站上显示一个大表,现在我想添加服务器端过滤。

要构建这些过滤器,我需要每列的所有不同值。这样做的最佳做法是什么?

我觉得为每一列和每一个页面加载执行一个SELECT DISTINCTorGROUP BY语句对于数据库来说太昂贵了。

注意:不幸的是,我无法更改数据库,因此无法为外键创建表。

标签: sqloracle

解决方案


如果无法对列进行索引并且您无法更改数据库结构(从数据库的角度来看这是正确的做法),那么我会看到一些选项

选择不同

你只是硬着头皮每次都运行它。但如果值很少改变,那就不理想了。结果将缓存在数据库中,因此您将获得最低限度的效率。

选择不同的一切

运行单个查询以获取不同值的所有可能组合。然后,您需要对每一列进行重复数据删除,但您只需访问数据库一次。

这显然取决于基数。

缓存应用上的值

您还没有提到您的 webapp 使用的是什么,但您应该能够使用某种持久性/缓存框架,以便您加载不同的值列表一次,然后将它们保存在内存中并根据需要进行更新。

这种方法还取决于更新发生的位置。如果数据库在您的 webapp 之外发生变化,那么这将成为问题。


推荐阅读