Oracle kullanıyoruz , yazdığımız sorugular yavaş geldiği zamanlar oluyor. Sorguları hızlandırmak için neler yapabiliriz?
comments
2 references
// Comments are closed.
Oracle kullanıyoruz , yazdığımız sorugular yavaş geldiği zamanlar oluyor. Sorguları hızlandırmak için neler yapabiliriz?
// Comments are closed.
Temel seviyede düşünmeye calışacağım, elimizde “kisiler” diye bir veri kaynağımız yani tablomuz olsun. Bu tabloda milyonlarca kayıt olduğunu farz edelim ve tablodan yavaş gelmesinin sebebi tüm tablo kayıtlarının birden çekiliyor olması olabilir
Tüm tabloya select atmak yerine daha özel bir select atılabilir, yani tüm kişileri getir demeyelim de, şu şu özelliklere sahip kişileri getir diyerek bazı koşullar koyarsak yazacağımız select’imize daha hızlı çekecektir datayı. Bunun için WHERE condition (şartı) kullanılabilir.
ve bu şart ne kadar artar ise, çekmeye calıştığınız veri daha spesifik olacaktır , başka şartlar da eklemek için WHERE ile birlikte AND kullanılabilir mesela,
*** Veri tabanından hızlı veri çekmenin en etkili yöntemlerinden biri olan INDEXLEME yöntemini kullanarak, istediğiniz sütunlar için index ekleyebilirsiniz. Tek bir sütunu veya birden fazla sütunu kullanarak indexleyebilirsiniz. Bu yöntemle veri çekmede çok hız kazanırsınız.
Bir de her tabloda bulunması gerektiğini düşündüğüm PRIMARY-KEY denen unique değer alan bir sütun olmalı. Bellirli bir veri aratırken bu primary key sütun adı kullanılarak aratmak çok etkili olacaktır.
Tolga bey’in dediği gibi sorguların hızlı çalışmasında en büyük rolü index’ler üstleniyor. Çalıştırdığınız sorgunun execution planına bakıp index mi kullanılıyor, yoksa tablo üzerinde full scan mi yapılıyor görebilirsiniz.
index kullanıldığında execution planda, cost’un daha az olduğunu görürsünüz.
Bunun haricinde işlem yapılan tablo üzerinde paralellik ve partitioning kullanılabilir. Eğer tablo yapısı üzerinde bir değişiklik yapamıyorsanız, sorgunuza bu sorguyu paralel çalıştır şeklinde hint ekleyebilirsiniz. Nasıl mı? aşağıdaki gibi;
SELECT /*+parallel */ ename, dname FROM emp e, dept d WHERE e.deptno=d.deptno;SELECT /*+ parallel(10) */ ename, dname FROM emp e, dept d WHERE e.deptno=d.deptno;Yukarıda 10 sayısı paralellik sayısını belirtiyor. eğer bu sayıyı bir önceki sorgudaki gibi belirtmezseniz, database seviyesinde tanımlı parametreye bakarak paralellik sayısını kendi ayarlayacaktır.
Burda kullanılan parallel hintini, update, delete, insert işlemlerinizde de kullanabilirsiniz.