Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın Türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi

0
Oracle'da bir sorguyu nasıl daha hızlı çalıştırabilirim?

Açık 2 Cevaplar 1464 Gösterim Veri Tabanı
Oracle kullanıyoruz , yazdığımız sorugular yavaş geldiği zamanlar oluyor. Sorguları hızlandırmak için neler yapabiliriz?

2 Cevap

0

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 

SELECT * FROM kisiler ;

 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. 

SELECT * FROM kisiler WHERE isim='tolga';

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,

SELECT * FROM kisiler WHERE isim='tolga' AND soyisim='celik';

*** 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.

(2.0k puan)
düzenledi
1

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.

(604 puan)