2011-12-08 58 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和外鍵還有很多其他場景,但這是最常見的場景。