因此,我對我的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