【发布时间】:2011-01-07 20:34:26
【问题描述】:
假设我有一张客户表和一张采购表。每次购买都属于一位客户。我想在一个SELECT 声明中获取所有客户的列表以及他们最后一次购买。最佳做法是什么?关于构建索引有什么建议吗?
请在您的回答中使用这些表/列名称:
- 客户:
id,name - 购买:
id,customer_id,item_id,date
在更复杂的情况下,通过将最后一次购买放入客户表来对数据库进行非规范化(在性能方面)是否有益?
如果(购买)id 保证按日期排序,是否可以使用LIMIT 1 之类的东西来简化语句?
【问题讨论】:
-
是的,它可能值得非规范化(如果它大大提高了性能,你只能通过测试两个版本来发现)。但非规范化的缺点通常值得避免。
标签: sql select join indexing greatest-n-per-group