【问题标题】:SQL select distinct or a new table? [closed]SQL选择不同的还是新表? [关闭]
【发布时间】:2014-06-04 08:01:12
【问题描述】:

假设我有一个数据库,其中有一个表,其中一些列可以经常重复,例如“国家”或“事件”(点击、按下等),我想让用户选择在网页中构建自己的查询。现在我想用可用值填充一个下拉列表。一种选择是将国家和事件存储在单独的表中,并在主表和这两个表之间建立关系,然后只需从表中执行 select * 即可填充下拉列表。另一种选择是将它们留在主表中,并在我想从主表中获取的字段上执行 Select distinct。这两者中哪一个是实现我想要的性能明智的更稳健的方式?

【问题讨论】:

  • 您的问题没有简单的答案。我想答案将取决于它。你会有缓存吗?如果是这样,并且不同的值没有改变,那就没关系了。桌子的尺寸是多少?你会查询索引并加入索引吗?

标签: sql select distinct


【解决方案1】:

随着时间的推移,您正在考虑使用 select distinct 来显示国家/地区/事件类型会变得越来越慢,因为您的主表会随着数据而增长。

我建议您阅读数据库规范化和最佳实践,以了解更多关于哪些可行或不可行的信息。

快速回答:使用 2 个表,一个存储国家,一个存储事件类型。然后使用与主表的关系来定义它。

【讨论】:

    【解决方案2】:

    最好将它们放在单独的查找表中。这称为数据库规范化。

    如需进一步了解该术语:http://databases.about.com/od/specificproducts/a/normalization.htm

    【讨论】:

      【解决方案3】:

      使用 DISTINCT 总是会产生性能问题,因为(如果您的字段上有正确的索引)连接会快得多。这也意味着你可以保持第一范式。

      我建议您在实际环境中对此进行测试以比较查询时间。

      编辑:看看关系数据库设计,如果你和我一样,它让我大开眼界,了解如何通过后端优化客户端 - 数据库性能。

      【讨论】:

        猜你喜欢
        • 2013-07-12
        • 1970-01-01
        • 2011-04-16
        • 2010-11-02
        • 1970-01-01
        • 2010-09-05
        • 2015-06-14
        • 1970-01-01
        相关资源
        最近更新 更多