Şemayı tasarlamadan önce gereksinimlerinizi anlayın (mümkünse).
Veriler hakkında bilgi edinin, 1) indeksleme 2) kullanılan depolama türü, 3) satıcı motoru veya özellikleri; yani ... önbellekleme, bellek içi yetenekler 4) veri türleri 5) tablo boyutu 6) sorgulama sıklığı 7) kaynak paylaşılıyorsa ilgili iş yükleri 8) Test
A) Gereksinimler değişiklik gösterecektir. Donanım beklenen iş yükünü destekleyemiyorsa, iş yükündeki gereksinimlerin nasıl sağlanacağını yeniden değerlendirmelisiniz. Tabloya ekleme sütunu ile ilgili. Veritabanı görünümleri destekliyorsa, adlandırılmış sütunlarla belirli verilerin dizine alınmış (?) Bir görünümünü oluşturabilirsiniz (vs. '*' öğesini seçin). "Garbage-in" -> "Garbage-out" sendromuna asla girmediğinizden emin olmak için verilerinizi ve şemanızı düzenli olarak gözden geçirin.
Başka bir çözüm olmadığını varsayarsak; aşağıdakileri dikkate alabilirsiniz. Bir soruna her zaman birden fazla çözüm vardır.
1) Dizin oluşturma: Select * bir tablo taraması gerçekleştirir. Çeşitli faktörlere bağlı olarak, bu, bir disk araması ve / veya diğer sorgularla çekişmeyi içerebilir. Tablo çok amaçlıysa, tüm sorguların performans gösterdiğinden ve hedef sürelerinizin altında yürütüldüğünden emin olun. Çok miktarda veri varsa ve ağınız veya diğer kaynak ayarlanmamışsa; bunu dikkate almanız gerekir. Veritabanı paylaşılan bir ortamdır.
2) depolama türü. Yani: SSD, disk veya bellek kullanıyorsanız. G / Ç süreleri ve sistem / işlemci üzerindeki yük değişecektir.
3) DBA veritabanını / tabloları daha yüksek performans için ayarlayabilir mi? Her ne sebeple olursa olsun, takımlar '*' seçiminin soruna en iyi çözüm olduğuna karar verdiler; DB veya tablo belleğe yüklenebilir. (Ya da başka bir yöntem ... belki de cevap 2-3 saniyelik bir gecikmeyle cevap verecek şekilde tasarlandı?
4) Başlangıçta başlayın. Veri türlerinizi ve sonuçların nasıl sunulacağını öğrenin. Daha küçük veri tipleri, alan sayısı sonuç kümesinde döndürülen veri miktarını azaltır. Bu, kaynakları diğer sistem ihtiyaçları için kullanılabilir halde bırakır. Sistem kaynakları genellikle bir sınıra sahiptir; 'daima' istikrar ve öngörülebilir davranış sağlamak için bu sınırların altında çalışır.
5) tablo / veri boyutu. '*' seçeneğini seçmek küçük tablolarda yaygındır. Genellikle belleğe sığarlar ve yanıt süreleri hızlıdır. Tekrar .... ihtiyaçlarınızı gözden geçirin. Özellik sürünme planı; daima mevcut ve gelecekteki olası ihtiyaçları planlayın.
6) Sorgu / sorgu sıklığı. Sistemdeki diğer iş yüklerinin farkında olun. Bu sorgu her saniye tetiklenirse ve tablo küçükse. Sonuç kümesi önbellekte / bellekte kalacak şekilde tasarlanabilir. Ancak, sorgu Gigabytes / Terabytes veri ile sık bir toplu işlemse ... diğer iş yüklerinin etkilenmemesini sağlamak için ek kaynaklar ayırmak daha iyi olabilir.
7) İlgili iş yükleri. Kaynakların nasıl kullanıldığını anlayın. Ağ / sistem / veritabanı / tablo / uygulama adanmış veya paylaşılmış mı? Paydaşlar kimlerdir? Bu üretim, geliştirme veya KG için mi? Bu geçici bir "hızlı düzeltme" midir. Senaryoyu test ettiniz mi? Bugün mevcut donanımda kaç sorun olabileceğine şaşıracaksınız. (Evet, performans hızlıdır ... ancak tasarım / performans hala düşüktür.) Sistemin saniyede 10 bin sorgu yerine saniyede 5-10 sorgu gerçekleştirmesi gerekiyor mu? Veritabanı sunucusu adanmış mı yoksa başka uygulamalar mı yapıyor, paylaşılan kaynakta izleme yürütülüyor mu? Bazı uygulamalar / diller; O / S, çeşitli semptomlara / sorunlara neden olarak belleğin% 100'ünü tüketecektir.
8) Test: Teorilerinizi test edin ve olabildiğince çok anlayın. Seçtiğiniz '*' sorununuz önemli olabilir veya endişelenmenize gerek bile olmayan bir şey olabilir.
SELECT COUNT(*)
kötü olmak inanılmaz derecede eski ve modası geçmiş . Bilgi içinSELECT *
- bakınız: stackoverflow.com/questions/1960036/…