因此,我对我的MySQL数据库设计中的'具有多种变体的产品'模式头痛不已。在大型数据集上的MySQL中的IFNULL的性能
我想要一张名为base_products
和products
的表格。每product
属于base_product
。
product
应继承base_product
的列,但也有一些列命名相同。列数据products
将覆盖base_products
列,但前提是products
上的列不为NULL。
检索产品在理论上看起来像这样的查询:
SELECT
p.id,
IFNULL(p.sku, _p.sku) AS sku,
IFNULL(p.ean, _p.ean) AS ean,
IFNULL(p.weight, _p.weight) AS weight
IFNULL(p.unit_id, _p.unit_id) AS unit_id
FROM products AS p
JOIN base_products as _p ON p.id = _p.product_id
WHERE IFNULL(p.weight, _p.weight) > 500
在这种情况下IFNULL
用于查询潜在的非常大的表。
在这种情况下,IFNULL
的使用是否可以接受?或者当查询大型数据集时这会打破性能?
创建一些休虚拟数据并执行EXPLAIN以知道它将如何执行。 –
我会告诫不要使用sql的任何方面,因为它是一个继承系统 – Drew
@ user2864740我应该补充说,这也必须工作WHERE IFNULL(p.name,_p.name)='something''。它应该根据“产品”中的数据的存在真正做出选择哪一个合作伙伴来执行。 – Boyd