Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 9362|Yanıt: 0

[Kaynak] MySQL database iron rule

[Bağlantıyı kopyala]
Yayınlandı 10.10.2019 14:00:44 | | |
İyi bir veritabanı spesifikasyonu, yazılım uygulamasının karmaşıklığını azaltmaya ve iletişim maliyetlerini azaltmaya yardımcı olur.

1. Depo inşa etmenin demir yasası

-
Demir yasa
Seviye
Açıklama
Karakter seti
UTF-8 kullanın. Emoji saklanıyorsa, depolama için utf8mb4 kullanın.
zorla

Sıralama kuralları
Kullanın utf8_general_ci
zorla

2. Masa yapımının demir yasası

-
Demir yasa
Seviye
Açıklama
tefsir
Saha açıklamaları olduğundan emin olun.
zorla

kodlamak
UTF-8 kullanın. Emoji saklanıyorsa, depolama için utf8mb4 kullanın.
zorla

alanın kavramsal olup olmadığı
Adı is_xx ile olmalı ve veri tipi işaretsiz tinyint (1 evet, 0 noy), örneğin is_deleted(1 sil, 0 silinmedi).
zorla
Herhangi bir alan negatif değilse işaretsiz olmalıdır
Tablo adı, alan adı
Sadece küçük harfler, alt çizgiler veya rakamlar kullanılabilir; Altı çizgi veya sayı ile başlamak yasaktır; İki alt çizgi arasında sadece sayılar yasaktır; Ayrılmış kelimeleri devre dışı bırak; Tablo isimlerinde çoğul isimlerin kullanımı yasaktır.
zorla

Veritabanı adı ve tablo adının adlandırılması
Veritabanı adı, uygulama adıyla tutarlı olmalı ve tablo adı tablonun İş Name_Role ile adlandırılmalıdır.
zorla

Indeks isimlendirmesi
Birincil anahtar indeksi pk_ alan adını kullanır; Alan adı uk_ benzersiz indeks; Normal indeksler idx_ alan adları kullanır.
zorla
pk_ birincil anahtardır; uk_ benzersiz bir anahtardır; idx_ indeksdir
Ondalık tip
Veri türü ondalıktır ve float ile double kullanımı yasaktır, float ve double hassasiyet kaybı yapar ve eğer depolanan veri aralığı ondalık aralığını aşarsa, verilerin tam sayılar ve ondalık sayılara bölünüp ayrı ayrı saklanması önerilir.
zorla

varchar tipi
Varchar, değişken uzun bir dizidir, önceden depolama alanı ayrılmaz, uzunluk 5000 karakteri geçmemelidir, eğer uzunluk 5000'den fazlaysa metin uygulanabilir (ayrı bir tablo oluşturun, birincil anahtarı kullanarak karşılık verin, böylece diğer alanların indeksleme verimliliğini etkilememek için).
zorla

Tablo adında üç alan olmalı
id (veri tipi imzasız bigint, tek tablo artışı, adım boyutu 1), gmt_create, gmt_modified (aktif oluşturma zamanı, pasif güncelleme zamanı, veri tipi datetime).
zorla

Alan yedekliği
Alanlar uygun yedekliliğe izin verir, ancak veri tutarlılığı dikkate alınmalıdır ve yedek alanlar 1) nadiren değiştirilmelidir; 2) Varchar süper uzun alan değil, metin alanı ise hiç yok.
Öner

Veritabanı ve tabloları böl
Bölümlendirme yalnızca tek bir tablodaki satır sayısı 5 milyon satırı aştığında veya tek bir tablonun kapasitesi 2 GB'ı geçtiğinde önerilir.
Öner


Uygun karakter depolama süresinin ayarlanması sadece veritabanı tablosu ve indeks depolamasını tasarruf etmekle kalmaz, daha da önemlisi alma hızını artırır.

3. Bir indeks demir yasası oluşturun

-
Demir yasa
Seviye
Açıklama
Benzersiz indeks
İşte benzersiz özelliklere sahip alanlar, alanlar kombinasyonu bile olsalar bile, benzersiz şekilde indekslenmelidir. Benzersiz indeks ekleme hızını etkilese de, bu kayıp önemsizdir, ancak sorgu hızını önemli ölçüde artırır. Ayrıca, uygulama katmanı çok kapsamlı kontrol kontrolüne sahip olsa bile, Murphy Yasası'na göre benzersiz bir indeks olmadığı sürece, kirli veriler kaçınılmaz olarak üretilecektir.
zorla

Join
Üçten fazla tablo birleştirmeyi engeller, katılım gerektiren alanlar ve veri türlerinin tutarlı olması gerekir; Birden fazla tablo sorgularla ilişkilendirildiğinde, ilgili alanların bir indeks olması gerektiğinden emin olun. Çift tablo birleştirmeniz olsa bile, tablo indekslemesine ve SQL performansına dikkat edin.
zorla

Varcharfield
Indeks uzunluğu belirtilmeli ve tüm alanları indekslemeye gerek yoktur, sadece indeks uzunluğunu gerçek metin ayrımına göre belirler. Indeks uzunluğu ve ayrım, genellikle dizi tipi veriler için çelişkiler çiftidir; 20 uzunluğuna sahip indekslerin ayırt derecesi %90'dan fazladır; bu da sayı(farklı sol(sütun adı, indeks uzunluğu))/sayı(*) ayrım derecesine göre belirlenebilir.
zorla

Sayfa aramasında bulanıklaştırma yasaktır
Sayfa araması bulanıklaşmayı veya tamamen bulanıklığı engeller, gerekirse lütfen çözmek için arama motoruna gidin. Yasaklama Nedeni: Indeks dosyası, B-Ağacı'nın en soldaki önek eşleştirme özelliğine sahiptir ve eğer soldaki değer belirlenmezse, bu indeks kullanılamaz.
zorla

Sipariş
Senaryoya göre bir düzen varsa, indeksin düzenliliğine dikkat edin. Siparişin son alanı birleşik indeksin bir parçasıdır ve file_sort önlemek ve sorgu performansını etkilemek için indeks kombinasyon sırasının sonunda yerleştirilir. Örnek: burada a=? ve b=? C ile sıra; Indeks a_b_c şeklinde oluşturulmalıdır; Karşı örnek: Indekste bir aralık araması varsa, indeks sırası kullanılamaz, örneğin a>10 b'ye göre sıralanır; Index a_b sıralanamaz.
Öner

4. SQL demir kuralları yaz

-
Demir yasa
Seviye
Açıklama
count(*)
count(column name) veya count(constant) yerine count(sabit) kullanmayın; count(*), SQL92 tarafından tanımlanan standart satır sayısı için soru sözdizimi, veritabanından bağımsız ve NULL ile non-NULL'dan bağımsızdır. count(*) NULL değerli satırları sakarken, count(column name) bu sütunlu NULL satırları saymaz.
zorla

Count(belirgin col)
NULL hariç sütundaki benzersiz satır sayısını sayar. Count(farklı col1, col2), sütunlardan biri NULL ise, diğer sütunun değeri farklı olsa bile 0 döner.
zorla

sum(col)
Bir sütunun tüm değerleri NULL olduğunda, count(col) 0 döner, ancak sum(col) NULL döner, bu yüzden sum() kullanırken NPE sorunlarının farkında olmanız gerekir. NPE problemleri şu şekilde önlenebilir: tablodan if(isnull(sum(g)), 0, sum(g)) seçin;
zorla

isnull
ISNULL() kullanarak bunun NULL bir değer olup olmadığını belirleyin. NULL, herhangi bir değere kıyasla NULL'dur.
zorla

Sayfalama sorgulama mantığı
Sayı 0 ise, sonraki sayfa ifadesinin yürütülmemesi için doğrudan geri gönderilmelidir.
zorla

Dış anahtarlar ve kaskadlar
Yabancı anahtarların kullanımı ve zincirleme yasaktır ve tüm yabancı anahtar kavramları uygulama katmanında çözülmelidir. Sebep: Yabancı anahtarlar ve kaskadlar dağıtık, yüksek eşdeğerli kümeler için uygun değildir, zincirleme güncellemeler güçlü engeller, veritabanı güncelleme fırtınaları riski vardır ve yabancı anahtarlar veritabanının ekleme hızını etkiler.
zorla

Depolanmış prosedürler
Saklanan prosedürler yasaktır, saklanan prosedürler hata ayıklamak ve ölçeklendirmek zordur ve taşınabilir değildir.
zorla

Veri düzeltmesi
Veri düzeltirken (özellikle kayıtları silerken veya değiştirirken), yanlışlıkla silinmesini önlemek için önce seçin ve güncelleme ifadesini ancak doğru olduğundan emin olduktan sonra çalıştırın.
zorla

içinde
Eğer önlenemezse, sonraki set eleman sayısı 1000 içinde kontrol edilmeli.
Öner

Kısmal tablo
Silmekten daha hızlı olan ve daha az sistem ile log kaynağı kullanan truncate table kullanmak yasaktır, ancak truncate işlem içermez ve tetikleyicileri tetiklemez, bu da kazalara yol açabilir, bu yüzden bu ifadeyi geliştirme kodunda kullanmayın.
referans


5. ORM, demir yasaları haritalıyor

-
Demir yasa
Seviye
Açıklama
Tablo sorgusu
Sorgular için * kullanması yasak olan alanların listesi, hangi alanların gerekli olduğu net olmalıdır.
zorla

POJO
POJO sınıfının Boolean özniteliği is'ye eklenemezken, veritabanı alanı is'e eklenmelidir; bu nedenle resultMap'teki alanlar ile öznitelikler arasında eşleme gereklidir.
zorla

Dönüş parametreleri
resultClass'ı dönüş parametresi olarak kullanmak yasaktır, tüm sınıf öznitelik adları veritabanı alanlarına teker teker karşılık gelse bile, tanımlanmalıdır; Her tablonun da ona karşılık gelen bir özniteliğe sahip olması gerekir. Sebep: Eşleme ilişkisini alanı DO sınıfıyla eşleştirecek şekilde yapılandırmak, böylece bakım kolay olsun.
zorla

Dönüş parametreleri
Sorgu sonuç kümesinin çıktısı olarak doğrudan HashMap ve HashTable kullanılması yasaktır. Sebep: Özellik değerinin türü kontrol edilemezdir.
zorla

sql.xml Parametreleri yapılandırma
sql.xml Yapılandırma parametreleri için #{}, #param# kullanın ve ${} kullanmayın, çünkü ${} SQL enjeksiyonuna açıktır.
zorla

queryForList
Mybatis ile gelen queryForList (String statementName, int start, int size) kullanımı yasaktır. Sebep: Veritabanındaki statementName ile ilgili SQL ifadesinin tüm kayıtlarını alınarak ve ardından subList kullanılarak start, boyut alt kümesi elde edilmesiyle uygulanır.
zorla

Güncelleme zamanı
Bir veritabanı tablosu kaydını güncellerken, kaydın değişiklik süresini aynı anda güncellemeniz gerekir.
zorla

Veritabanı tablosu kayıtlarını güncelle
Büyük ve tam bir veri güncelleme arayüzü yazmayın (POJO sınıfı olarak geçilmiş). SQL çalıştırılırken, hata yapmaya meyilli, verimsiz ve artan binlog depolama nedeniyle değişmemiş alanları güncellemeyin.
Öner

@Transactional
@Transactional İşlemleri kötüye kullanma. İşlemler, veritabanının QPS'sini etkiler. Ayrıca, işlemler kullandığınızda, önbellek geri alması, arama motoru geri alması, mesaj tazminatı, istatistiksel düzeltme gibi geri alma şemalarının çeşitli yönlerini göz önünde bulundurmanız gerekir.
referans

Mybatis dinamik sql etiketleri
< compareValue, isEqual> özellik değerine kıyasla bir sabittir, genellikle bir sayıdır ve karşılık gelen SQL ilanının eşit olduğunda yürütüldüğünü gösterir; < isNotEmpty> boş ve null olmadığında yürütüldüğünü gösterir; < isNotNull> null olmadığında yürütüldüğünü gösterir.
referans








Önceki:SEO operasyon haritası, tüm ağdaki ilk haritadır; ultra eksiksiz internet yüksek çözünürlüklü işlem haritalarından oluşan bir koleksiyon
Önümüzdeki:[Earth Science] DK Çocuk Ansiklopedisi Birleşik Krallık'tan yüksek kaliteli bir ansiklopedi...
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com