Metin değerleri sayıda için iyi bir PHP / MySQL karma çözüm

2 Cevap php

Short descriptio:

Need hashing algorithm solution in php for large number of text values.


Long description.

PRODUCT_OWNER_TABLE
serial_number (auto_inc), product_name, owner_id

OWNER_TABLE
owner_id (auto_inc), owener_name

Ben 200000 benzersiz ürünler ve sahiplerinin (AND mülkiyet tüm sonraki değişiklikler) bir veritabanını korumak gerekir. Her ürün bir sahibi vardır, ancak sahibi birçok farklı ürünler olabilir. Sahibi isimleri, (hem de unicode olması oldukça muhtemel) sadece metin değerleri vb "Adam Smith", "John Reeves" vardır.

Ben veritabanı tasarımı optimize etmek istiyorum, bu yüzden bu komut dosyasını çalıştırdığınızda ben olduğunu düşünüyordum, ne her hafta, bu i owner_id getiriliyor, PRODUCT_OWNER_TABLE benzer varsayalım bir tabloya karşı denetler, sonra bir proudct sahibi fetchs. Daha sonra OWNER_TABLE içinde owner_id arar. Eğer maç, daha sonra aynı, bu yüzden üzerinde hareket eder. Farklı zaman sorunudur ...

Veritabanı optimize etmek için, ben o değeri var olup olmadığını görmek için OWNER_TABLE diğer "owner_name" girdilerinin karşı kontrol edilmesi gerektiğini düşünüyorum. Eğer varsa, o zaman ben bu owner_id kullanmalısınız. Eğer yoksa, o zaman ben başka bir giriş eklemek gerekir.

"Isim" ile ilgili özel bir şey olduğunu unutmayın. sürece ben doğru linkagaes korumak VE OWNER_TABLE "salt okunur, append-yeni" tipi tablo yapmak gibi - Ben mülkiyet tarihsel bir arşiv oluşturmak gerekir.

I kaç benzersiz sahibi isimleri (~ 50000?) Dont know I, 200000 girişleri için bu kontrolü yapmak gerekir. Ben bir müzakere çözüm gerekir düşünüyorum - OWNER_TABLE alışkanlık sıralanabilir, bu yüzden arama algos alışkanlık optimal.

programlama dili PHP. veritabanı MYSQL olduğunu.

2 Cevap

Ne teklif gereksiz, bakımı zor, karmaşık ve işlevselliğini ne de performansını artırmak olmayacaktır.

Bu birçok ilişki basit bir - böylece ürün tablosu (veri var gibi görünüyor) sahibi tabloya başvuran yabancı anahtar içermelidir. Hiç sahibi tablosunun içinde bir değer başvurmayan yabancı anahtarında boş olmayan bir değere sahip bir senaryo olurdu ama nerede ben hayal edemiyorum.

Sorun biraz vekil tuşları (otomatik artış değerleri) kullanımınız ile karmaşık. Hangi durumda ve MySQL başına kısıtlamaları desteklemek olmadığından, owner.owner_name benzersiz bir dizin oluşturmak için - - açıklamasından, sahibinin gerçek benzersiz tanımlayıcı owner_name ve her zaman orada bir değer eklemeye çalıştığınızda Bir ürün eklemek veya bir ürünün sahibini değiştirmek - Eğer sorgu çiftleri görmezden belirtebilirsiniz - Bu sorgu tarafından döndürülen affected_rows 1 ise o zaman, insert_id getir, aksi halde zaten saklanan anahtarı yoklar.

C.

+1 200000 kayıtlar çok büyük MySQL çok daha işleyebilir değil. (Birincil sahibi masa ve çarpım tablosundan yabancı on iki) tuşuna dizinleri ile bir-çok ilişkisi: burada var sadece tasarım basit ve en verimli IMHO.

Optimizasyon daha hızlı sonuç almak veya sunucu yükünü azaltmayı hedefliyor, ve kayıtlar değişiklikleri veya silinirse / yerleştirilemeyen size OPTIMIZE deneyebilirsiniz

OPTIMIZE TABLE `Owner`;
OPTIMIZE TABLE `Product`;

Garip sıralama veya yanlış sonuçlar alırsanız, veritabanı bozuk. Bu tamamen functionnal sistemi üzerinde düzenli MySQL üzerinde gerçekleşmesi, ancak olabilir rebuild the whole tables. Yok

(Linkler mysql 5.0 için sağlanan, kendi sürüm belgeleri almak için ayarlayın)