假设我有一个数据库,其中包含一些可以经常重复的列,例如“国家”或“事件”(点击,按等),我想让用户可以选择在网页中构建自己的查询。现在我想用可用值填充下拉列表。一种选择是将Countries和事件存储在单独的表中,并在主表和这两个表之间建立关系,然后从表中执行select *
以填充下拉列表。另一种选择是将它们留在主表中,并在我想从主表中获取的字段上执行Select distinct。这两个中的哪一个是实现我想要的更强大的性能方式?
答案 0 :(得分:2)
将它们放在单独的查找表上会更好。它被称为数据库规范化。
有关该术语的进一步阅读:http://databases.about.com/od/specificproducts/a/normalization.htm
答案 1 :(得分:2)
随着时间的推移,您考虑使用显示国家/地区/事件类型的select distinct
将变得越来越慢,因为您的主表将随着数据的增长而增长。
我建议您阅读有关数据库规范化和最佳实践的内容,以了解有关哪些内容有效。
快速回答:使用2个表,一个用于存储国家/地区,一个用于存储事件类型。然后使用与主表的关系来定义它。
答案 2 :(得分:2)
使用DISTINCT始终是一个性能瑕疵,其中(如果你的字段上有正确的索引),连接会更快。这也意味着你可以保持第一范式。
我建议您在实际环境中对此进行测试,以比较查询时间。
编辑:看看关系数据库设计,如果你像我一样,它会让我看到如何通过后端优化客户端 - 数据库性能。