Dizinleri kullanma ve oluşturma

PostgreSQL'de Sorgu Performansını İyileştirme

Amy McCarty

Instructor

Dizinlere genel bakış

Ne

  • Aramayı hızlandırmak için sıralı sütun anahtarları oluşturma yöntemi
  • Kitap dizinine benzer
  • Veri konumuna başvuru

Neden

  • Daha hızlı sorgular

Nerede

  • Sık filtrelenen sütunlar
  • Birincil anahtar
PostgreSQL'de Sorgu Performansını İyileştirme

Dizin örneği

malzeme tarif
domates spagetti ve köfte
taze soğan kızarmış pilav
yumurta kızarmış pilav
kıyma spagetti ve köfte
makarna spagetti ve köfte
pirinç kızarmış pilav
soya sosu kızarmış pilav
SELECT *
FROM cookbook
WHERE recipe = 'fried rice'
PostgreSQL'de Sorgu Performansını İyileştirme

Anahtar ve gösterge olarak dizin

İki tablo. Bir Dizin tablosu, tarif sütunu ve _12'den _18'e sıralı giden bir gösterge sütunu içerir. Dizinli Tablo soldakiyle aynıdır ve ek bir gösterge sütunu vardır. Bu sütundaki değerler Dizin tablosundaki gösterge sütunuyla aynıdır. Oklar, Dizin tablosundaki dört “kızarmış pilav” değerinin Dizinli Tablo'daki dört değere nasıl karşılık geldiğini gösterir.

PostgreSQL'de Sorgu Performansını İyileştirme

Mevcut dizinleri bulma

pg_tables
  • information_schema'ya benzer
    • Postgres'e özgü
  • Veritabanı hakkında meta veriler
PostgreSQL'de Sorgu Performansını İyileştirme

Mevcut dizinleri bulma

pg_tables
  • information_schema'ya benzer
    • Postgres'e özgü
  • Veritabanı hakkında meta veriler

 

SELECT * FROM pg_indexes
schemaname tablename indexname tablespace indexdef
food dinner recipe_index null CREATE INDEX recipe_index ...
PostgreSQL'de Sorgu Performansını İyileştirme

Dizin oluşturma

Malzeme, tarif ve porsiyon sütunları olan akşam yemeği tablosu. domates - spagetti ve köfte - 4. taze soğan - kızarmış pilav - 2. yumurta - kızarmış pilav - 2. kıyma - spagetti ve köfte - 4. makarna - spagetti ve köfte - 4. pirinç - kızarmış pilav - 2. soya sosu - kızarmış pilav - 2.

CREATE INDEX recipe_index 
ON cookbook (recipe);
CREATE INDEX CONCURRENTLY recipe_index
ON cookbook (recipe, serving_size);
PostgreSQL'de Sorgu Performansını İyileştirme

Kullanmalı mı, kullanmamalı mı

Dizin kullanın

  • Büyük tablolar
  • Sık kullanılan filtre koşulları
  • Birincil anahtar

Dizinden kaçının

  • Küçük tablolar
  • Çok sayıda null içeren sütunlar
  • Sık güncellenen tablolar
    • Dizin parçalanır
    • Veriyi iki yerde yazar
PostgreSQL'de Sorgu Performansını İyileştirme

Sık güncellenen tablolar

İki tablo. Bir Dizin tablosu, tarif sütunu ve _12'den _19'a sıralı giden bir gösterge sütunu içerir. Dizinli Tablo soldakiyle aynıdır ve ek bir gösterge sütunu vardır. Bu sütundaki değerler Dizin tablosundaki gösterge sütunuyla aynıdır. Oklar, Dizin tablosundaki dört “spagetti ve köfte” değerinin Dizinli Tablo'daki dört değere nasıl karşılık geldiğini gösterir. Üçü Dizin tablosunun üstünde birlikte sıralıdır. Bir “spagetti ve köfte” Dizin tablosunun en altındadır ve Dizinli Tablo'daki yeni fesleğen satırına karşılık gelir.

PostgreSQL'de Sorgu Performansını İyileştirme

Dizin sorgusu değerlendirmesi

Sorgu planlayıcı

Büyük bir tencerenin etrafında birden çok şef

EXPLAIN
SELECT * 
FROM cookbook

 

Sorgu Planı

Seq scan on cookbook (cost=0.00...22.70
  rows = 1270 width = 36)
  • Maliyet (zaman) tahminleri
PostgreSQL'de Sorgu Performansını İyileştirme

Hadi pratik yapalım!

PostgreSQL'de Sorgu Performansını İyileştirme

Preparing Video For Download...