Veritabanı Normalleştirmesinden Sonra Hala Dizine Ekleme Gerekiyor mu


14

İyi bir normalleştirme yaptıktan sonra, yine de tabloyu dizine eklemeniz mi gerekiyor? Bu performansı nasıl etkileyecek? İyi bir normalizasyondan sonra performansı bir şekilde etkileyecek mi?

Birincil anahtarınız ve yabancı anahtarınız zaten varsa hangi sütunlar genellikle dizine eklenir?

Bir veritabanını normalleştirmek zaten etkili gibi görünüyor. Ancak, endekslemenin veritabanını nasıl etkilediğini atlamış olabilirim. Bu yalnızca sorgular kullanıldığında etkili midir? Bu nasıl çalışır / bir veritabanını daha iyi yapar ve yapar?


5
Birincil anahtarınız ve yabancı anahtarınız zaten varsa hangi sütunlar genellikle dizine eklenir? Tarih. İsimler. Aramanız veya sıralamanız gerekebilecek her şey.
Carson63000

Birincil anahtardaki dizin sayılmaz mı?
CodesInChaos

Yanıtlar:


34

Evet. Aslında, dizinlerinize daha fazla dikkat etmeniz gerekebilir. Normalleştirme, optimum depolama ile ilgilidir . Karmaşık birleştirmelerle daha karmaşık sorgular kullanıldığından, bu genellikle geri alma hızı ile çelişir . Bazen hızlı geri alma hızları gerektiren veritabanlarını koruyan kişiler normalleştirebilir veya geri kazanımı kolaylaştırmak için verilerini daha az normalleştirilmiş yapılarda düzenler.


21
Normalleştirmenin amacı depolama verimliliği değil, ekleme, güncelleme ve silme bağımlılıklarının kaldırılmasıdır. Daha fazla okuma

4
@MichealT ile bunun verimlilikle ilgili olmadığını kabul ediyorum. Bağlantıdan çıkardığım mantıksal tutarlılıktı.
JeffO

Tartışmalı 'verimlilik' kelimesini kaldıracağım (bunun temel olarak normalleşmenin genel amacını özetlediğini düşünüyorum) ve bunun yerine 'optimal' kelimesini kullanıyorum, bunun anlamı okuyucuya bırakıyor. Normalleştirmenin asıl amacı, bir veritabanı normalleştirildikten sonra dizinlerin neden hala gerekli olduğu ile ilgili değildir.
GrandmasterB

56

Veritabanı performansı için dizine eklemenin ne yaptığını yanlış anladığınızı düşünüyorum.

Bir dizin, veritabanının satırları bulmasına yardımcı olur . Dizinler, ek disk alanı ve yerleştirme ve güncelleme sırasında bir miktar performans karşılığında, veritabanı motorunun eşleşen satırlarda oturmasına yardımcı olan özel veri yapılarıdır.

Onları güncel tutmak için fazladan yer ve maliyet (bir miktar) performans aldıklarından, veritabanı tasarımcısı olarak uygulama ve sorgu desenlerinize uyacak şekilde açıkça dizinler oluşturmanız gerekir.

Dizinler veritabanı normalizasyonuna diktir.


4

Evet, normalleştirmeden sonra hala dizine eklemeniz gerekir.

Birlikte çalıştığınız tablolar, normalleştirmeden önceki tablolarınız kadar fayda sağlar. Gerçekte, kendi başlarına aynılar: tablolar.

Bununla birlikte, göz önünde bulundurmanız gereken bir şey olan dizinler, verilerinizde daha hızlı yolunuzu bulmanıza yardımcı olur. Bir veritabanının tasarımını normalleştirmek her zaman iyidir, ancak bazen performans nedeniyle uygulamayı normalleştirmeniz gerekir. Ancak bu sadece duruma göre yapılır.


2

Evet.

Endeksler, verileri aramayı hızlandıran bir yöntemdir. Bazı sorgular, genellikle veritabanı altyapısı tarafından örtük olarak dizine alınan birincil anahtarlardır, ancak diğer sorguların diğer sütunları kullanması olasıdır. Genellikle bazı sorgular benzersiz olmayan ve bu nedenle herhangi bir normalizasyondan sonra birincil anahtar haline gelemeyen sütunlara göre arama yapar. Muhtemelen bu tür sütunları dizine eklemeniz gerekecektir.

Hangi indekslerin yaratılacağını bilmenin tek bir yolu var. , Uygulamadaki tüm sorguları atın onlar için temsili örnek parametrelerini bulmak ve veritabanı altyapısı onların sorgu planları göstermek zorunda (tüm veritabanı motorları var EXPLAIN, EXPLAIN QUERY PLANya da benzer komut; farklı motorlarda farklı olarak adlandırılır) ve test ne kadar süre alır. Daha yavaş olanları hızlandıran endeksler yaratın. Ayrıca, denediğiniz ancak kaynak israfını önlemeye yardımcı olmayan endeksleri tekrar bırakmayı unutmayın.


1

Dizinler genellikle en küçük tablolar dışında hepsinde gereklidir. Hemen hemen her yabancı anahtar dizine eklenmelidir ve sadece bir FK kurmak bir dizininiz olduğu anlamına gelmez (en azından bazı veritabanlarında değil, db belgelerine bakın). Sıklıkla katıldığınız veya cümlelerin dizine eklenmesi gereken yerlerde kullandığınız alanlar, eğer faydalı olabilecek olanlarsa (Booleanlar örneğin yarar sağlamayacak şekilde verilerde belirli bir değişkenliğe ihtiyacınız vardır) ve dizine eklemenin mümkün olduğu yerlerdir.

Bununla birlikte, her dizin yavaşlarken seçimleri hızlandırırken ekler \ güncelleştirmeler \ siler, bu nedenle dizinlerinizi dikkatlice seçin.

Dizinler, veritabanındaki kabul edilebilir performans için kritik öneme sahiptir.


0

Üçüncü bir normal form için, tüm birincil anahtarlarda kesinlikle dizinlere ihtiyacınız olacaktır.

Başka dizinlere ihtiyacınız olup olmadığı veritabanınızın nasıl kullanıldığına bağlıdır. Örneğin, belirli bir ZIP kodundaki müşterileri düzenli olarak ararsanız, müşteri tablosundaki zip_code sütununu dizine eklemek iyi bir fikir olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.