Tam tablo taraması - Full table scan

Bir tam tablo taraması (olarak da bilinir sıralı tarama) bir taramadır veri tabanı her biri nerede kürek çekmek of masa sıralı (seri) bir sırada okunur ve karşılaşılan sütunlar bir koşulun geçerliliği için kontrol edilir.[1] Tam tablo taramaları [2] genellikle, yoğun miktarda olması nedeniyle bir tabloyu taramanın en yavaş yöntemidir. G / Ç çoklu aramalardan ve maliyetli diskten belleğe aktarımlardan oluşan diskten gerekli okur.

Genel Bakış

Bir veritabanında, olmayan bir sorgu indekslenmiş Veritabanının verilen gereksinimleri karşılayan tüm kayıtları bulmak için tablonun her kaydını işlediği tam bir tablo taramasıyla sonuçlanır. Sorgu tablodan sadece birkaç satır seçse bile, tablodaki tüm satırlar incelenecektir. Bu genellikle yetersiz performansla sonuçlanır, ancak çok küçük tablolarda veya dizinleri güncel tutmanın ek yükü yüksek olduğunda kabul edilebilir.

Doktor Tam Tablo Taramasını Düşündüğünde[3]

Seçimde en önemli faktör hıza bağlıdır. Bu, tam bir tablo taramasının en hızlı olduğu ve farklı bir erişim yolu kullanamadığı durumlarda kullanılması gerektiği anlamına gelir. Birkaç tam tablo tarama örneği aşağıdaki gibidir.

  • Dizin yok

Optimizer, dizin bulunmadığından tam bir tablo taraması kullanmalıdır.

  • Az sayıda satır

Tam tablo taramanın maliyeti, küçük tablo nedeniyle dizin aralığı taramasından daha azdır.

  • Sorgu SELECT COUNT (*) işlendiğinde, sütunda boş değerler vardı

Sorgu, tipik bir dizindeki boş sütunların sayısını sayıyor. Ancak, SELECT COUNT (*) boş sütunların sayısını sayamaz.

  • Sorgu seçici değil

Dönüş satırlarının sayısı çok fazla ve tüm tabloda neredeyse% 100'lük bir yer alıyor. Bu satırlar seçili değildir.

  • Tablo istatistikleri güncellenmiyor

Tablodaki satır sayısı öncekinden daha fazla, ancak tablo istatistikleri henüz güncellenmedi. Optimize edici, dizini kullanmanın daha hızlı olduğunu doğru bir şekilde tahmin edemez.

  • Tabloda yüksek derecede paralellik var

Yüksek derecede paralellik tablosu, optimize ediciyi gerçek yoldan bozar, çünkü optimize edici tam tablo taramasını kullanır.

  • Tam bir tablo tarama ipucu

İpucu, optimize edicinin tam tablo taramasını kullanmasına izin verir.

Örnekler

İlk örnek, rengi kırmızı olan meyveler tablosundaki her meyvenin adını döndüren bir SQL ifadesini gösterir. Meyveler tablosunun renk sütunu için bir indeksi yoksa, veritabanı motoru her bir satırın rengini 'kırmızı' ile karşılaştırmak için meyvelerdeki her satırı yüklemeli ve incelemelidir:

   Meyvelerden isim seçin NEREDE color = 'red';

İkinci örnek, ismini döndüren bir SQL ifadesini gösterir. herşey meyveler tablosundaki meyveler. Bu ifadenin herhangi bir koşulu olmadığından - WHERE yan tümcesi olmadığından - veritabanı motoru, meyve tablosunun ad sütununda bir dizini olsa bile bu sorguya ilişkin verileri yüklemek ve döndürmek için bir tablo taraması kullanacaktır çünkü tabloya doğrudan bir dizinin ekstra soyutlama katmanı aracılığıyla tabloya erişmekten daha hızlı:

   Meyvelerden isim seçin

Üçüncü örnek, neredeyse kesin olarak sql motorunun tablo taraması yerine bir dizin kullanmasına neden olacak bir karşı örnektir. Bu örnek, öncekiyle hemen hemen aynı sorguyu kullanır, ancak döndürülen adların alfabetik sıraya göre olması için bir ORDER BY yan tümcesi ekler. Meyveler tablosunun ad sütununda bir dizine sahip olduğunu varsayarsak, veritabanı motoru artık adları sırayla döndürmek için bu dizini kullanacaktır çünkü dizinin ekstra soyutlama katmanı aracılığıyla tabloya erişmek satırları istenen sırayla döndürme avantajını sağlar. . Motor bir tablo taraması kullanarak satırları yüklemiş olsaydı, daha sonra döndürülen satırları sıralamak için ek iş yapması gerekirdi. Bazı aşırı durumlarda - ör. veritabanı motoru tarafından tutulan istatistikler, tablonun çok az sayıda satır içerdiğini gösterir - optimize eden kişi yine de bu tür sorgu için bir tablo taraması kullanmaya karar verebilir:

   Meyvelerden İsim Seçiniz Ada Göre SİPARİŞ EDİN

Lehte ve aleyhte olanlar

Artıları:

  • Veritabanı sisteminin tüm tabloyu satır satır taraması gerektiği için maliyet tahmin edilebilirdir.
  • Tablo, veritabanı blok arabelleğinin yüzde 2'sinden daha az olduğunda, tam tarama tablosu daha hızlıdır.

Eksileri:

  • Tam tablo taraması, dizin olmadığında veya dizin tarafından kullanılmadığında gerçekleşir. SQL. Ve tam tarama tablosunun sonucu genellikle dizin tablosu taramasından daha yavaştır. Durum şudur: tablo ne kadar büyükse, veri dönüşleri o kadar yavaş olur.
  • Gereksiz tam tablo taraması büyük miktarda gereksiz yere yol açacaktır. G / Ç tüm veritabanı üzerinde işlem yükü ile.

Ayrıca bakınız

Referanslar

  1. ^ "Tablo Taramalarından Kaçınma". Oracle. 2011.
  2. ^ "Hangisi Daha Hızlı: Dizin Erişimi mi yoksa Tablo Tarama mı?". Microsoft TechNet. 2002.
  3. ^ "Optimize Edici Erişim Yolları". Oracle. 2013.