sql - 加载表中每一列的 DISTINCT 值的最佳实践,用作过滤器
问题描述
我在网站上显示一个大表,现在我想添加服务器端过滤。
要构建这些过滤器,我需要每列的所有不同值。这样做的最佳做法是什么?
我觉得为每一列和每一个页面加载执行一个SELECT DISTINCT
orGROUP BY
语句对于数据库来说太昂贵了。
注意:不幸的是,我无法更改数据库,因此无法为外键创建表。
解决方案
如果无法对列进行索引并且您无法更改数据库结构(从数据库的角度来看这是正确的做法),那么我会看到一些选项
选择不同
你只是硬着头皮每次都运行它。但如果值很少改变,那就不理想了。结果将缓存在数据库中,因此您将获得最低限度的效率。
选择不同的一切
运行单个查询以获取不同值的所有可能组合。然后,您需要对每一列进行重复数据删除,但您只需访问数据库一次。
这显然取决于基数。
缓存应用上的值
您还没有提到您的 webapp 使用的是什么,但您应该能够使用某种持久性/缓存框架,以便您加载不同的值列表一次,然后将它们保存在内存中并根据需要进行更新。
这种方法还取决于更新发生的位置。如果数据库在您的 webapp 之外发生变化,那么这将成为问题。
推荐阅读
- encryption - 为什么安全多方计算(实现 Shamir 秘密共享)中使用的 mod prime p 远大于共享的总和(秘密)
- amazon-web-services - 基于 ELB 事件触发 AWS Lambda 函数
- android - 当我创建新的空活动 android studio 项目时,会显示此错误
- wordpress - 如何在 WooCommerce/Wordpress 中制作包含运费的优惠券
- azure - 存储过程活动 ADF V2
- python - 如何使用 kivy MeshLinePlot 运行单元测试?
- python - 如何在 postgresql 数组字段上使用 ilike 和任何 sqlalchemy?
- php - 从今天开始计算订单
- javascript - 您如何更改具有特定条件的多个标签?
- c# - 在断开连接的情况下保存实体图时,EF Core 3.1 抛出 System.InvalidOperationException