DBAtlas · Veritabanı operasyon atlası

Index'siz kolonlar için histogram oluştur ve yönet

MySQLIndex & İstatistik

Komut

ANALYZE TABLE shop.big UPDATE HISTOGRAM ON status WITH 64 BUCKETS;
-- 8.4+: veri degistikce otomatik guncellenen histogram
ANALYZE TABLE shop.big UPDATE HISTOGRAM ON status WITH 64 BUCKETS AUTO UPDATE;

SELECT SCHEMA_NAME, TABLE_NAME, COLUMN_NAME,
       HISTOGRAM->>'$."histogram-type"' AS type,
       JSON_LENGTH(HISTOGRAM->'$.buckets') AS buckets,
       HISTOGRAM->>'$."last-updated"' AS last_updated,
       HISTOGRAM->>'$."sampling-rate"' AS sampling_rate
FROM information_schema.COLUMN_STATISTICS;

ANALYZE TABLE shop.big DROP HISTOGRAM ON status;

Ne yapar?

Kolondaki değer dağılımını (singleton veya equi-height) data dictionary'de saklar; optimizer index'i olmayan kolonlardaki filtrelerin seçiciliğini doğru tahmin eder, join sırası ve plan kalitesi düzelir.

Ne zaman kullanılır?

Çarpık dağılımlı (ör. status, type) ve index eklenmesi istenmeyen kolonlarda EXPLAIN ANALYZE tahmini ile gerçek satır sayısı çok farklıysa.

Dikkat

Index'li kolonda optimizer index dive kullandığından histogram genellikle etkisizdir (eq_range_index_dive_limit aşılmadıkça). Varsayılan MANUAL modda histogram veri değiştikçe güncellenmez; periyodik ANALYZE ... UPDATE HISTOGRAM gerekir. Büyük tabloda histogram_generation_max_mem_size'a göre örnekleme yapılır (sampling-rate < 1). ANALYZE TABLE kısa bir metadata lock alır; histogram güncellemesi tablo istatistiğini (index cardinality) değiştirmez.

DBAtlas'ta aç →

İlgili