Kayıtlarla Hızlı İşlemler

22/03/2021, 01:41

mozuer

Çok kayıtlı veritabanları (özellikle bağlı tablolu veritabanı) için yaptığım araştırmalarda sorgu ya da Sql metni içerisinde kullanımda;
DLookup, Dsum , DCount vs fonksiyonlarının yavaş çalışabileceği yorumları ile karşılaştım.
Bu fonksiyonların yerine sunulan çözümler örneğin;
DCount yerine;
Public Function MyDCount(Expr As String, Domain As String, _
Optional Criteria = Null) As Integer
Dim rs As DAO.Recordset
Dim strSQL As String
MyDCount = 0
strSQL _
= " SELECT Count(" & Expr & ")" _
& " FROM " & Domain _
& " WHERE " + Criteria
Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
With rs
MyDCount = .Fields(0)
End With
rs.Close
Set rs = Nothing
End Function

gibi bir çözüme ulaştım.
Öğrenmek istediklerim Access 2016-2019 sürümü için;
1. Sorgu ya da Sql metni içinde Dlookup vs kullanımı gerçekten performans kaybı mı
2. Özellikle Count ya da DCount sayma işleminde hızlı sayım için tüm kayıtlar mı Count (*) kullanılmalı, alan adı mı Count([FieldName]) kullanlmalı ( bazı yorumlarda Count(*) daha hızlı olduğu belirtilirken bazı yorumlarda Count([...]) daha hızlı olduğu belirtilmiş)
Hızlı kullanım için sizin öneriniz nedir?
22/03/2021, 17:04

atoykan

Merhaba Sayın @mozuer

  1. Bağlı tabloların çok olduğu ve/veya sorguların içiçe veya büyük montanlı kayıtları sorgulaması gerektiği durumlarda sorgu içinde bahsettiğiniz şekilde Dcount, Dlookup , vb kullanımı yavaşlamaya sebep olabilir, bu doğru bir tespit. Örnek kodlamanızdaki gibi recordset içinde yapılan işlemler görece daha hızlı sonuç verecektir ancak salt bu yaklaşım ile daha hızlı sonuç alacağınız anlamına da gelmez zira burada oluşturacağınız recordsetten, veri türü ve yoğunluğuna kadar bir çok faktör de etkendir.
  2. Count(*), Count([FieldName])'e göre daha hızlı sonuç verecektir. Count(*) tüm kayıt/satır sayınızı verecek olup, Count([FieldName]) ise ilgili alana ait boş kayıt içermeyen kayıt/satır sayınızı verir(mantık olarak aslında kendi içinde alana göre bir sorgu daha çalıştıracak olduğundan performans düşer).

Ancak veritabanı veya yazılımda ana amaç hız değil neyi amaçladığınız ve nasıl sonuç almak istediğiniz ile ilgili olarak doğru işleyişi belirlemektir. Bu çerçevede kullanım amacınıza bağlı olarak bazen hızdan taviz vermek gerekebilir.
22/03/2021, 22:00

mozuer

Yorumlarınıza, ilginize teşekkür ederim.