Açıklama komutunun çıktısında iki terim 'Sıra Tarama' ve 'Bitmap yığın taraması' buldum. Birisi bana bu iki tarama türü arasındaki farkın ne olduğunu söyleyebilir mi? Bu tüm tablo olmayabilir (Post taramalarda Seq Scan ve Bitmap yığın taraması arasındaki fark nedir?
cevap
http://www.postgresql.org/docs/8.2/static/using-explain.html Temelde, sıralı tarama gerçek satır gidiyor (ı PostgreSQL kullanıyorum) ve sıranın 1'den okumaya başlamak ve sorgu memnun edilene kadar devam Örneğin, limit durumunda
Bitmap yığın taraması, PostgreSQL'in küçük bir satır kümesi (örneğin, bir dizinden) aldığını ve yalnızca bu satırları alacağını bildirmesi anlamına gelir. Bu elbette çok daha fazla arama yapacak, bu yüzden sadece satırların küçük bir alt kümesine ihtiyaç duyduğunda daha hızlı olacaktır.
bir örnek ele alalım: Şimdi
create table test (a int primary key, b int unique, c int);
insert into test values (1,1,1), (2,2,2), (3,3,3), (4,4,4), (5,5,5);
, kolayca bir seq tarama alabilirsiniz: o onun tablonun büyük çoğunluğu kapmak için gidiyor tahmin çünkü
explain select * from test where a != 4
QUERY PLAN
---------------------------------------------------------
Seq Scan on test (cost=0.00..34.25 rows=1930 width=12)
Filter: (a <> 4)
Bu sıralı tarama yaptım ; Bunu yapmaya çalışmak (büyük, aramaksızın okumak yerine) saçma olacaktır.
- bir inşa:
Şimdi, indeks kullanabilirsiniz:
explain select * from test where a = 4 ; QUERY PLAN ---------------------------------------------------------------------- Index Scan using test_pkey on test (cost=0.00..8.27 rows=1 width=4) Index Cond: (a = 4)
Ve nihayet, bazı bitmap işlemleri alabilirsiniz: olarak
explain select * from test where a = 4 or a = 3; QUERY PLAN ------------------------------------------------------------------------------ Bitmap Heap Scan on test (cost=8.52..13.86 rows=2 width=12) Recheck Cond: ((a = 4) OR (a = 3)) -> BitmapOr (cost=8.52..8.52 rows=2 width=0) -> Bitmap Index Scan on test_pkey (cost=0.00..4.26 rows=1 width=0) Index Cond: (a = 4) -> Bitmap Index Scan on test_pkey (cost=0.00..4.26 rows=1 width=0) Index Cond: (a = 3)
Biz bu okuyabilir İstediğimiz satırların bitmap'i = 4. (Bitmap dizin taraması)
- Bir = 3 için istediğimiz satırların bitmapini oluşturun. (Bitmap indeksi taraması)
- Ya birlikte iki bitmap (BitmapOr)
- masanın (Bitmap Öbek Tarama) kadar olan satırları bakın ve emin bir = 4 veya = 3 (yeniden kontrol kon) olmak için kontrol
Veya bir bitmap taraması, dizin taramalarının da bir alt kümesinde olabilir. – WolfmanDragon
@derobert, "arayan" ile ne demek istiyorsun? Herhangi bir yerde herhangi bir yer bulamıyor ... – zapadlo
@Zapadlo Disk aramada olduğu gibi, sıralı olarak rastgele erişim. – derobert
- 1. Android'de Bitmap ve Drawable arasındaki fark nedir?
- 2. Bitmap.Clone() ve yeni Bitmap (Bitmap) arasındaki fark nedir? Söyleyebileceğim
- 3. Yığın tablosu ve MySQL'de geçici tablo arasındaki fark nedir?
- 4. Widget post() ile handler post() arasındaki fark nedir?
- 5. Python'da {} ve [] arasındaki fark nedir?
- 6. UNIX'teki $ @ ve $ * arasındaki fark nedir?
- 7. $ arasındaki fark nedir? ve PowerShell
- 8. Fark() arasındaki fark nedir mustache.js
- 9. arasındaki fark nedir?
- 10. Java arasındaki fark nedir
- 11. arasındaki fark nedir?
- 12. arasındaki fark nedir?
- 13. app.doScript ve $ .evalFile arasındaki fark nedir?
- 14. gVim ve gVim arasındaki fark nedir?
- 15. isAlpha ve isLetter arasındaki fark nedir?
- 16. Control.Enter ve Control.GotFocus olayları arasındaki fark nedir?
- 17. .got ve .got.plt bölümü arasındaki fark nedir?
- 18. AutomationProperties.AutomationID ve AutomationProperties.Name arasındaki fark nedir?
- 19. Android'de getDir ve getFilesDir arasındaki fark nedir?
- 20. R içinde `=` ve `<-` arasındaki fark nedir?
- 21. uint ve System.UInt32 arasındaki fark nedir?
- 22. PropertyChangeListener ve VetoableChangeListener arasındaki fark nedir?
- 23. XSS'de IDREF ve IDREFS arasındaki fark nedir?
- 24. Cacerts ve keystore arasındaki fark nedir?
- 25. GPLv2 ve GPLv3 arasındaki fark nedir?
- 26. VarIsEmpty ve VarIsEmptyParam işlevleri arasındaki fark nedir
- 27. ActiveSupport'ta mattr_accessor ve cattr_accessor arasındaki fark nedir?
- 28. Hashtable ve Dictionary arasındaki fark nedir?
- 29. RoutedCommand ve RoutedUICommand arasındaki fark nedir?
- 30. MySQL'deki boolean ve bool arasındaki fark nedir?
basitçe söylemek gerekirse, "seq [5 minik satırlar olmadığından Evet, hepsi sıralı taramaları olurdu, bu sorgu planları aptal, ama biz
test
biz bunu analiz Had analiz başarısız bunun nedeni] tarama "dizinleri kullanmıyor" (genellikle daha yavaş) ve diğer tüm taramalar tabloda tanımlanan dizinleri kullanmaya çalışır. – Gnudiff