SQL选择不同的表还是新表?

SQL选择不同的表还是新表?,sql,select,distinct,Sql,Select,Distinct,假设我有一个数据库,其中有一个表,表中有一些可以经常重复的列,例如国家或事件单击、按等,我想让用户可以选择在网页中构建自己的查询。现在我想用可用值填充一个下拉列表。一个选项是将国家和事件存储在单独的表中,并在主表和这两个表之间建立关系,然后只需从表中选择*即可填充下拉列表。另一个选项是将它们留在主表中,并对我想从主表中获取的字段执行Select distinct。这两种方法中,哪一种在性能方面更可靠,以实现我的目标?最好将它们放在单独的查找表中。这叫做数据库规范化 要进一步了解以下术语:随着时间

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

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

要进一步了解以下术语:

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

我建议您阅读数据库规范化和最佳实践,以了解更多关于哪些方法有效或无效的信息


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

使用DISTINCT总是会影响性能,如果您的字段上有正确的索引,则联接会更快。这也意味着你可以保持第一范式

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


编辑:看一看关系数据库设计,如果你和我一样的话,它让我看到了如何通过后端优化客户端数据库性能。

你的问题没有简单的答案。我想答案是这要视情况而定。你要缓存吗?如果是这样的话,而且不同的值没有改变,那也没什么大不了的。这些桌子有多大?你会在索引上查询和加入索引吗?