使用由商店ID和商品ID組成的複合主鍵 - 它將爲每個商店提供每個商品的唯一主鍵,並且您不需要單獨的字段(假設商店標識和商品標識已在表格中)。
理想情況下,你應該有3個表...類似:
article
--------------------------------------------
id | isbn | ... etc ...
store
--------------------------------------------
id | description | ... etc ...
pricelist
--------------------------------------------
article_id | store_id | price | ... etc ...
隨着PRIMARY KEY
爲pricelist
量由article_id
和store_id
複合鍵。
編輯:(更新,其中包含從註釋的答案)
即使在一百萬行的UPDATE
應該是確定(OK的有一定的定義,它可能仍然需要一段時間與因爲article_id
和store_id
包括PRIMARY KEY
-它們將兩者被索引。
你只需要編寫你的查詢,以便它沿着線是:
UPDATE pricelist SET price = {$fNewPrice}
WHERE article_id = {$iArticleId}
AND store_id =` '{$sStoreId}'
雖然你可能要考慮在store
表(store.id
轉換PRIMARY KEY
- 因此在還pricelist.store_id
pricelist
表)到無符號INT或類似CHAR(30)。
雖然VARCHAR是更有效的,當談到磁盤空間,它有兩個缺點:
1:MySQL是不是太熱衷於更新VARCHAR值,它可以使索引臃腫了一點,所以您可能需要偶爾運行OPTIMIZE TABLE
(我在order_header表之前發現此問題)。
2:與非固定長度字段(如VARCHAR)任何(MyISAM的)表將必須有一個DYNAMIC行格式這是稍微低效率的,當涉及到查詢它 - 有關於更多信息在此SO帖子上:MySQL Row Format: Difference between fixed and dynamic?
你可以發表你的表的結構嗎? –
聽起來像你需要重組你的表。您應該每個項目只有一行。如果它有多個價格,這些將反映在一個單獨的表格中,這可能是物品和商店之間的多對多。 – John
@DaveRix我編輯了我的Q. – Joseph