SQL性能 - 联合和子选择

时间:2011-12-08 17:47:47

标签: mysql performance union sqlperformance sql-subselect

我有三个表有一个公共字段,而不是它的标识符。例如:

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 个答案:

答案 0 :(得分:2)

只要每个查询都在访问索引,使用Union就不会影响性能。您在expiration_date上添加索引的建议是正确的。

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

答案 1 :(得分:0)

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

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