Tek bir sütun veya birden fazla satır içine mysql insert çoklu veri

4 Cevap php

just want to ask fveya an opinion regarding mysql. which one is the better solution?

case1: stveyae in 1 row:-

product_id: 1

attribute_id: 1,2,3

Ben verileri retreive zaman, ben ',' tarafından dize bölmek

Bazı veritabanı gördü, bu şekilde, veri deposu, kayıt sütun ürün niteliğini saklanan, bir üründür:

a:3:{s:4:"spec";a:2:{i:1;s:6:"black";i:3;s:2:"37";}s:21:"spec_private_value_id";a:2:{i:1;s:11:"12367591683";i:3;s:11:"12367591764";}s:13:"spec_value_id";a:2:{i:1;s:1:"5";i:3;s:2:"29";}}

veya

case2: stveyae in 3 row:-

product_id: 1

attribute_id: 1


product_id: 1

attribute_id: 2


product_id: 1

attribute_id: 3


this is the nveyamal I do, to stveyae 3 rows fveya the attribute fveya a recveyad.

In term of perfveyamance and space, anyone can tell me which one is better. From what I see is case1 save space, but need to process the data in PHP (veya other server side scripting). case2 is mveyae straight fveyaward, but use spaces.

4 Cevap

Yerden tasarruf edin? Cidden? Sen bir terabyte bir disk 70 dolar için gittiğinde bayt tasarrufu bahsediyoruz?

Ve belki de byte tasarruf değil. Eğer "12234,23342,243234" gibi nitelikleri saklıyorsanız, bu 3 özellikleri için 30 byte gibi. Eğer smallint olarak saklamak istiyorsanız, onlar 6 byte yer alırdım.

Nitelikleri, örneğin, daha sonra aramak için önemli olup olmadığına bağlıdır.

Eğer gerçekten, örneğin, bir özelliği olan tüm ürünleri göstermek için bir sorgu çalıştırmak gerekir olmayacağını onlar hakkında ve bu durumda umurumda değil durumda sadece tek bir alanda tefrika dizi gibi nitelikleri tutmak eğer iyi olabilir .

Ancak, bir özelliği olan tüm ürünleri bulmak sizin gibi özelliklere sahip durumda en azından "kötü" olacağını virgülle ayrılmış (sizin gibi kullanmanız gerekir), ve durumda size mağaza onlar her türlü tamamen kullanışsız olduğu gibi tefrika diziler niteliklerini sıralama veya sql sorguları kullanarak gruplandırma.

Diğer verileri sıralama / / gruplama seçmek için herhangi bir önemi olup olmadığını ürünler arasında çoklu ilişkiler için ayrı bir tablo kullanarak ve özelliklerini çok daha iyidir.

Yer kazanmak rağmen case 1 olarak, dize bölme harcanan zaman var.

Ayrıca alanın büyüklüğüne dikkat çekmek gerekir: 2 niteliklerle 50 ürün ve biri 100 ile nitelikleri varsa, alan ~ varchar (200) ... Sen hiç bir yerden tasarruf olmaz yapmak gerekir.

I case 2 iyi ve önerilen çözüm olduğunu düşünüyorum.

Bu değerleri kullanarak olacağını SELECT ifadeleri dikkate almak gerekir. Belirli özelliklere sahip kayıtları aramak istiyorsanız, o ayrı sütun ve dizin bunları bunları saklamak için çok daha etkilidir. Aksi takdirde, süreç çok daha uzun sürebilir "GİBİ" ifadeleri yapıyoruz.