Tüm Ürünler
Search
Belge Merkezi

ApsaraDB for SelectDB:Dizin tabanlı hızlandırma

Son Güncelleme:Oct 08, 2026

Büyük veri kümelerindeki analitik sorgular için tüm tabloları taramak başlıca bir darboğazdır. ApsaraDB for SelectDB, gereksiz veri okumalarını en aza indirmek için iki kategori dizin sunar: otomatik olarak oluşturulan ve yönetilen yerleşik akıllı dizinler ile belirli sorgu kalıpları için sizin tanımladığınız ikincil dizinler.

Kategori Dizin türleri
Yerleşik akıllı dizinler Zone map dizini, ön ek dizini
İkincil dizinler Ters dizin, Bitmap dizini, Bloom filter dizini, NGram Bloom filter dizini

Bu konu, yerleşik akıllı dizinlerin çalışma şeklini ve bunlardan en iyi şekilde nasıl yararlanacağınızı ele almaktadır.

Zone map dizini

Zone map dizini, sütun yönelimli depolama biçimindeki her sütun için otomatik olarak oluşturulur ve korunur. SelectDB her sütun için şu bilgileri kaydeder:

  • Min: Sütundaki en düşük değer

  • Max: Sütundaki en yüksek değer

  • NULL count: Sütundaki NULL değerlerin sayısı

Bir sorgu aralık veya eşitlik filtresi içerdiğinde, SelectDB filtreyi her sütunun Min-Max sınırlarıyla karşılaştırır ve hiçbir satırın eşleşme ihtimalinin olmadığı verileri atlar. Bu sayede büyük veri kümelerinde aralık sorguları ve eşitsizlik filtreleri önemli ölçüde daha hızlı çalışır.

Kullanıcı eylemi gerekmez; SelectDB zone map dizinlerini otomatik olarak yönetir.

Ön ek dizini

Ön ek dizininin oluşturulma yöntemi

ApsaraDB for SelectDB, devasa paralel işleme (MPP) mimarisine sahip bir çevrimiçi analitik işleme (OLAP) veritabanıdır. Veriler, sıralı dize tablosuna (SSTable) benzer bir yapıda saklanır: satırlar, tablo oluşturma sırasında tanımlanan anahtar sütunlara göre sıralanır ve depolanır.

Aggregate Key, Unique Key ve Duplicate Key modellerinde satırlar, AGGREGATE KEY, UNIQUE KEY veya DUPLICATE KEY yan tümcesinde listelenen sütunlara göre sıralanır. Ön ek dizini, her satırın anahtar sütunlarının ilk 36 baytını alır ve bunları kısayol arama yapısı olarak kullanır.

Bir kısıtlama geçerlidir: Bir anahtar sütunun türü VARCHAR ise, ön ek dizini 36 bayttan daha az tüketilmiş olsa bile o sütunun sınırında kesilir.

Örnekler

Örnek 1: Ön ek dizini birden çok sütunu kapsar

Sütun adı Tür
user_id BIGINT
age INT
message VARCHAR(100)
max_dwell_time DATETIME
min_dwell_time DATETIME

Bu şema için ön ek dizini user_id (8 bayt) + age (4 bayt) + message (ön ek 20 bayt) = toplam 36 bayttır.

Baştaki sütunlarda filtreleme yapan bir sorgu ön ek dizinine isabet eder ve önemli ölçüde daha hızlı çalışır:

-- Hits the prefix index: user_id is the first key column
SELECT * FROM table WHERE user_id = 1829239 AND age = 20;

İlk anahtar sütununu atlayan bir sorgu ön ek dizinine isabet etmez:

-- Does not hit the prefix index: user_id is not in the filter
SELECT * FROM table WHERE age = 20;

Örnek 2: Ön ek dizini VARCHAR tarafından kesilir

Sütun adı Tür
user_name VARCHAR(20)
age INT
message VARCHAR(100)
max_dwell_time DATETIME
min_dwell_time DATETIME

Bu şema için ön ek dizini yalnızca user_name (20 bayt) değerinden oluşur. user_name VARCHAR olduğundan, yalnızca 20 bayt tüketilmiş olsa bile dizin bu sütundan sonra kesilir. Sonraki sütunlar (age, message) ön ek dizinine dahil edilmez.

Materialized view kullanarak ön ek dizinini değiştirme

Bir tablonun anahtar sütun sırası oluşturma sırasında sabitlenir, bu nedenle bir tabloda yalnızca bir ön ek dizini bulunur. Farklı bir sütun sırasını ve dolayısıyla farklı bir ön ek dizinini desteklemek için sütunları yeniden sıralayan bir materialized view oluşturun. Daha fazla bilgi için bkz. Materialized views.

Sonraki adımlar