2011-12-08 59 views
0

我有三个表有一个共同的领域,这不是它的标识符。例如:SQL性能 - 联盟和Subselects

dairy_warehouse 
    -dairyId (primary key) 
    -expiration_date 
    -other dairy related fields 

frozen_food_warehouse 
    -frozenFoodId (primary key) 
    -expiration_date 
    -other frozen food related fields (not same as dairy related fields) 

dry_goods_warehouse 
    -dryGoodsId (primary key) 
    -expiration_date 
    -other dry goods related fields (not same as frozen food or dairy fields) 

我正在尝试构建一份报告,列出所有在下个月到期的项目。由于三个表之间没有外键关系,我不认为一个联接是可行的。我目前倾向于在expiration_date上添加一个索引,并使用union和3个子选择,但是我担心这会有可怕的表现。有更好的解决方案吗?

回答

2

只要每个查询命中索引,使用联合都不会影响性能。你建议在expiration_date上添加索引是一件正确的事情。

没有外键,因为我会说任何记录都不相关。

0

外键用于引用完整性 - 确保“子”表不能指定不存在于“主”表*中的值。外键本身不会加快SELECT查询性能。您认为在“expiration_date”上添加索引应导致高性能查询。

  • 使用RI和外键还有很多其他场景,但这是最常见的场景。