Mysql kullandığınızda, bir tablo çok fazla veriyi silse de, tablodaki veri dosyaları ve indeks dosyalarının garip derecede küçük olduğunu görebilirsiniz. Bunun nedeni, mysql'in verileri silerken (özellikle Metin ve BLOB) birçok veri boşluğu bırakmasıdır; bu da orijinal verinin alanını kaplar, böylece dosya boyutu değişmez. Bu delikler gelecekte veri eklendiğinde tekrar kullanılabilir ve tabii ki orada kalabilirler. Bu delik sadece depolama maliyetini artırmakla kalmaz, aynı zamanda veri parçalanması nedeniyle tablonun tarama verimliliğini de düşürür.
Kullanım Senaryoları:Tablonun büyük bir bölümünü sildiyseniz ya da değişken uzunluklu satırlara sahip bir tabloda (VARCHAR, BLOB veya TEXT sütunları olan) çok sayıda değişiklik yaptıysanız, OPTIMIZE TABLE kullanmalısınız. Silinen kayıtlar bağlı listede tutulur ve sonraki INSERT işlemleri eski kayıt konumunu tekrar kullanır. OPTIMIZE TABLE kullanarak kullanılmayan alanı yeniden ayıklayabilir ve veri dosyalarının parçalarını düzenleyebilirsiniz. [Kütüphanenizden büyük miktarda veri silindiğinde, veri dosyası boyutunun azalmadığını görebilirsiniz. Bu, silme işleminden sonra veri dosyasında kalan parçalanmadan kaynaklanır.
Çoğu ortamda OPTIMIZE TABLE çalıştırmanıza hiç gerek yok. Değişken uzunluklu satırlarda çok fazla güncelleme yapsanız bile, onları sık sık çalıştırmanıza gerek yok, haftada bir ya da ayda bir kez, sadece belirli tablolar için.
OPTIMIZE TABLE yalnızca MyISAM, BDB ve InnoDB tabloları için çalışır.
BDB tabloları için, OPTIMIZE TABLOSU şu anda ANALYZE TABLE'a eşlenmiştir. InnoDB tabloları için, OPTIMIZE TABLOSU, ALTER TABLE ile eşlenir ve bu da tabloyu yeniden oluşturur. Operasyonları yeniden inşa edin, indeks istatistiklerini güncelleye ve kümelenmiş indekslerde kullanılmayan alanı boşaltın.
Not: MySQL, OPTIMIZE TABLE çalıştırma sırasında tabloyu kilitler.
Myisam için doğrudan optimize tablosunu table.name,InnoDB motoru olduğunda, "Tablo optimize etmeyi desteklemiyor, bunun yerine yeniden yarat + analiz yapıyor" diyecektir ve normal koşullarda, myisam'dan innodb'ye dönüştürürseniz, dönüştürmek için alter table table.name engine='innodb' kullanırsınız ve bunu optimizasyon için de kullanabilirsiniz.Bu nedenle, InnoDB motoru olduğunda, optimizasyon için optimize etmek yerine alter table table.name engine='innodb' kullanabiliriz。
Öncesi ve sonrası etkilerini görüntülemek için, '[table_name]' gibi [veritabanı]'dan tablo durumunu göster gibi göster tablo durum komutunu kullanabilirsiniz; Dönüş sonucundaki data_free, boşluk tarafından kaplanan depolama alanıdır.
MySQL zamanlı toplu kontrol tablosu onarımı ve tablo optimize etme tablosunu optimize eden shell betiği şöyledir:
Özgün:
Bağlantı girişi görünür.
Bağlantı girişi görünür.
|