2015-05-05 13 views

cevap

28

Bu

ANALYZE TABLE table_name; 

ile yapılır.

ANALYZE TABLE bir tablo için anahtar dağıtımını analiz eder ve depolar. Analiz sırasında, tablo MyISAM, BDB ve InnoDB için bir okuma kilidi ile kilitlenir. Bu ifade MyISAM, BDB, InnoDB ve NDB tabloları ile çalışır.

+0

Mükemmel, tam da aradığım şey bu. – qub1n

+2

MyISAM için tam bir tablo taraması gerektirir; potansiyel olarak yavaş. InnoDB için birkaç hızlı prob. –

10

Neden? Birincisi istatistikleri asla güncellemeye gerek yok. Bir endeksi yeniden oluşturmak daha da nadiren gereklidir.

OPTIMIZE TABLE tbl; endeksleri yeniden ve ANALYZE yapacağız; o zaman alır. InnoDB'nin istatistikleri yeniden için

ANALYZE TABLE tbl; hızlıdır. 5.6.6 ile daha az ihtiyaç duyulur.

+3

Bu cevaba katılmamalıyım. Eski bir tablodan, yaklaşık 300 bin satırdan geçerken, bir dizinde bulunan birkaç sütunu güncelledim ve dizin hala eski değerleri güncellemeden önce içeriyordu. İndeksi düşürdüm ve yeniden yarattım ve sonra iyi çalıştı. MySQL 5.7.10 – Adergaard

+1

@Adergaard - Endeksin hala eski değerleri içerdiğini nasıl anladınız? (Bu bir hata raporuna yol açabilir.) –

+1

Beğen @Adergaard, ben de aynı fikirde değilim. Benim durumumda, bazı tam metin dizini kullanan bir sorgu çok yavaştı (tam dizin araması kullanılmış gibi görünüyordu). Performans sadece indeks düşürüldükten ve yeniden oluşturulduktan sonra geliştirildi. MySQL 5.6.31. Keşke Oracle'da olduğu gibi sadece endeksler için bir çeşit yeniden inşa edilmesini isterdim: “ALTER INDEX ... REBUILD;”. –

1

Ayrıca optimizasyonları çalıştırmak için sağlanan CLI aracı mysqlcheck kullanabilirsiniz. Bir ton of switches var ama en temelde sadece veritabanı, kullanıcı adı ve şifre giriyorsunuz.

bu ekleme cron veya Windows Zamanlayıcı bu bir automated process yapabilirsiniz. (MariaDB ama temelde aynı şey.)

İlgili konular