Kategoriler


SON YORUMLAR
dinozorunsesi
ne yapsam bilemiyorum galiba mühendis olacağım
kelmamut
tatar ramazan karı ve iş bulamayan ezik bi orosbu çocuğusun az ötede ağla derdin zengin olmaksa mühendislk değil tıp okucaktın yanlış okumuşşun karı kızsa derdin gidip pezevenklik yapacaksin mühendislikle alakası yok senin hayatın kaymış olm benim dayım bilgisayar müh kocaeli mezunu amerikada paraları götürüyo 10k dolar maaşla sen anca ağla ezik orospu çocuğu
disko_anksiyete
dalga gectigin kamyon soforleri asgari ucretin cok ustunu aliyorlar ve is bulma sorunlari yok :D aynisini yazilim sektoru ve bilgisayar muhendisligi icin soyleyebilir misin? 4 sene okuyup lisans diplomani aldiktan sonra yurtdisindaki sirketlerde calisabilecek nitelikte olmayacaksin, yurticindekiler de asgari ucretten ya da hatta staj ucretinden baslatip amina koyacaklar, haftasonunu bile sikip atacaklar :D aptal pic seni.
Eray
Java, C ve C++ dillerindeki programlama sorularının çözümlerinde ve projelerinde hızlı ve nitelikli bir şekilde yardımcı olabilirim. Projenin başarılı bir şekilde çalışacağını garanti ederim.
Eray
AA ile geçtiğim ve sizin de yüksek notlar alacağınızı garanti ettiğim programlama dersleri için JAVA, C ve C++ programlama dillerinde özel ders verebilirim. Aynı zamanda lablarınıza, ödevlerinize hazırlanmanız için örnekler çözüp online eğitim sürecinde size destek olabilirim. Whatsapp: 05424280350
Çınar Kılınç
Ufhgry
kamyoncu bilgisayar mühendisi
@disko_anksiyete ben bu yorumdan sonra kamyon şoförlüğüne başladım arkadaşlar hakkınızı helal edin...:(
siber
hocam şu yorum sistemine bi authentication ekleyin ya da onay sürecinden geçsin bali, nokta diye mesaj atan var, 100 kere reklam veren var.
someone
Kısa ve öz bir yazı olmuş.Bunun avantajı ise az çok kafasında soru işareti bulunan birisi uzun uzadıya giden yazılarla vakit kaybetmeden hızlı bir şekilde sorularına yanıt bulabilir.Teşekkürler.
disko_anksiyete
Tatar Ramazan her açıdan haklı, sizi çıldırtan da bu sanırım. Ülkede 1 yılda bu sektörde kaç tane önlisans ve lisans mezunu çıktığını hesaplayın. Piyasadaki iş ilanlarına göz atın, 30 tane teknoloji bilen insan üstü programcı arayan gerçekçilikten uzak ilanlara bile 5.000 üzeri insan başvuruyor çaresizlikten, işsizlikten ve yeteneklerini, bilgisini değerlendirebilme ümidi ile. Ve çalıştıkları maaşlar hakkındaki bilgiyi de zaten devletin belirlediği minimum mühendis maaşına göz atarak aşağı yukarı anlayabilirsiniz, iddialı ya da hayat idame ettirecek sayılarda maaşlar kesinlikle verilmiyor. "Ben girişimci olurum, hayalimdeki uygulamayı yapacğaım ve milyonlar kazanacağım görürsünüz ulan!" fikrine de sıkı sıkıya bağlanmış olabilrsiniz ancak, görmüş olduğunuz o popüler uygulamalar ve getirileri absürt derecede nadir ihtimallere dayalı Yemeksepeti.ni, getir.i görüp gaza gelip kendi milyon dolarlık uygulamanızı yapabileceğiniz olası gelebilir ancak, peki yıllar boyu üstünde çalışılıp kimsenin kullanmadığı uygulamalar, biten kariyerler, batan start-up.lar, edilen intiharlar? Yurtdışına gitmeyi de unutun. Yurtdışındaki eğitim standartları ve mühendis standartları ülkemizdeki ile kıyaslanamaz bile. Bize 4 yılda öğretilmeyen, hatta adı bile sunulmayan teknolojileri adamlar 1 sömestırda uygulamalı öğreniyor. Yani hiçbir Avrupa firmasının, 3. dünya ülkesindeki bilmemne üniversitesinden mezun bir mühendise ihtiyacı yok, ki ihtiyaçlarını karşılayamacağınızdan da eminim. Burada gelip yazılımcı maaşını savunanlar ya tuzu kuru, torpilli orospu evlatlarıdır, hani var ya o görmüş olduğunuz kullanmış olduğunuz bozuk sikten uygulamaları ve siteleri geliştiren eğitimsiz şempanzeler ordusu, heh onlar. Ya da, daha üniversite öğrencisi olup beyni yıkanmış, hayatında bu meslekten 5 kuruş kazanmamış ama bir anda milyonlar kazanacağı ıslak rüyasını aklından bir anlığına ayırmayan embesil Türk üniversite öğrencileridir. Sektör zor, yeteri kadar ödüllendirici değil hatta iş bile bulunamıyor şu an bulunduğumuz noktada. "Kendini geliştir" diyen sakatlar için de, ileri düzey İngilizce bilen ve nesne tabanlı programlama dillerinde (Java, C#) çeşitli alanlarda çalışmış birisi olarak (game development, desktop app development) bunları yaşadım, bunları savunuyorum. Aksini savunuyorsan bırak bakalım Linkedin profilini de başarılı bilişimci görüp feyz alalım değil mi? İşkembeden herkes sallar, herkesin kafasında bir kariyer planı vardır. Önemli olan gerçekleri hayallerden ayırt edebilmek. Ne kadar para kazanmaya istekli olduğunuz inanın, hiç sikimde değil. Aldığını sanmış olduğunuz eğitim de sizi zorluyor olabilir ama kafanızı kumdan çıkartıp globalde yapılan işlere, global kalitede programcılara göz atın. Sonra da siktirin gidin.
ramazansavar
ya ramazan ne 10 programı biliyon da kim seni takmıyor, detaylı açıkla bakalım.
Tatar Ramazan
Zavallı mühendisler en zavallıları da sizsiniz. Eniştem muhasebecikilten sigortacılıktan bi ton para kazanıyor siz 8-10 bin tl.ye talim ediyorusunuz. O da canınızı çıkartıyorlar. Müdürler bağırıp çağırıyor size. Millet tatil yerlerinde bahşişlerle iyi para kazanıyor karılarla alem yapıyor. Adam ev aldı karı aldı antalyada. Siz de firmalara eşeklik yapın. Stres sıkıntı çekin. Bi bok yok bu meslekte mezun olunca görürsünüz. 12 yıl deneyimliyim. 10 teknoloji biliyorum 10 bin tl bile vermiyorlar. Lanetli bilişim sektörü. Adaletsizlik saçmalık sıkıntı had safhada. Yazacam madde madde hepsini bekleyin.
Tatar Ramazan
Zavallı mühendisler en zavallıları da sizsiniz. Eniştem muhasebecikilten sigortacılıktan bi ton para kazanıyor siz 8-10 bin tl.ye talim ediyorusunuz. O da canınızı çıkartıyorlar. Müdürler bağırıp çağırıyor size. Millet tatil yerlerinde bahşişlerle iyi para kazanıyor karılarla alem yapıyor. Adam ev aldı karı aldı antalyada. Siz de firmalara eşeklik yapın. Stres sıkıntı çekin. Bi bok yok bu meslekte mezun olunca görürsünüz. 12 yıl deneyimliyim. 10 teknoloji biliyorum 10 bin tl bile vermiyorlar. Lanetli bilişim sektörü. Adaletsizlik saçmalık sıkıntı had safhada. Yazacam madde madde hepsini bekleyin.
EsMer
Bence çok mantikli.

Bilgisayar Mühendisleri
Here is the website inspired me to use 
it as a guide when I tried to define 
myself as an engineer candidate a few 
years ago. It really helped me to work
 and study feeling in confidence with 
being on the right way. I suggest this 
website to whom it may direct her/his 
to find the right career path. It 
includes many articles varies from 
real life experiences to detailed 
software engineering issues. But the 
most dignified parts for me are the 
articles in general and career titles.
Son okunan makaleler:
Oracle - Indexler Hakkında detaylı bilgi
Bilgisayar Mühendisi olmanın 10 iyi yönü.
Bilgisayar Mühendisliği Hakkındaki 10 Büyük Yalan!
Kulak asmayın.
Kim neyi niye seçer? Java mı c# mı? Oracle vs SqlServer?
7 adımda patlak mühendisi tanıma rehberi?
Bill Gates Emekli Oldu
Bilgisayar Mühendisleri Kaç Para Alır?
Bilgisayar Mühendisi olacaklara üniversite seçme rehberi?
DAYINIZ YOK MU?
Bilgisayar Mühendisleri Kaç Para Alır?
Bilgisayar Mühendisleri Kaç Para Alır?
En iyi bilgisayar mühendisliği bölümüne sahip üniversiteler
SAÇMA SORULARA DÜZGÜN CEVAPLAR!
Türkiye'de Bilgisayar Mühendisliğinin Durumu? Bilg. Mühendisliğinin bugünü ve geleceği
Bilgisayar Mühendisleri Kaç Para Alır?
Bilgisayar Mühendisleri Kaç Para Alır?
En iyi bilgisayar mühendisliği bölümüne sahip üniversiteler
Bilgisayar Mühendisleri Kaç Para Alır?
Para ile ödev yapmak üzerine

Bilgisayar Mühendisleri Portalı

Oracle - Indexler Hakkında detaylı bilgi

Yapılan bir sorguda istediğimiz koşullardaki verileri en kısa zamanda elde etmek isteriz.Bunu sağlamanın yollarına “Access path”  adı veriliyor.Bunların başında da belki de en çok bilineni ve genellikle de en etkili olanı indekslerdir.Oracle’ın her yeni sürümünde farklı indeks yapıları ile karşılaşmak mümkün.Mesela bitmap indeksler ile fonksiyon bazlı(function-based index) indeksler örnek olarak söylenebilir.Burada bu konulara girilmeyecek sık kullanılan indekslerin “genel” özelliklerinden kısaca bahsedilecektir.

NOT : Indeksler sorgularda genellikle kurtarıcı ya da en etklili yol olarak bilinse de uygun kullanılmadıklarında hepimizin gözünü korkutan –ki  her zaman böyle değildir- tüm tablonun taranması(Full Table Scan) işleminden daha çok zaman aldığı durumlar olabilmektedir.

Şimdi kısaca indekslere bir göz atalım : Indeks kullanımını anlamak için önce B*Tree yapısı hakkında bilgi sahibi olmakta fayda var.

btreeB*Tree yapısında 3 farklı seviyeden bahsedilir.Bunların ilki en tepede duran “Root”’tur.En altta da “leaf” denilen seviye ve bu ikisi arasında da “branch” (lar) bulunur.Örneğin “root” değerimiz 50 olsun.Bundan küçükleri sola , büyükleri sağa , branch tada boyle bir ayrım yaptıgımzı düşünerek yeniden bir dallanma gerçekleştirdiğimizde (leaf) , kabaca bir B Tree oluşturmuş oluruz.(Bu yapının etkili kullanımı için dengeli bir yapıda tutulması gerekmektedir.Yani veriler bir tarafa dogru yığılma yapmamalıdır.)
En etkili avantajı ağaç üzerinde milyonlarca kayıt olsa bile en fazla 2 ya da 3 I/O ile bir kayda ulaşmanın mümkün olmasıdır.(Dezavantaj ise bir düğümün silinmesi ya da değiştirilmesi durumunda ağacın yeniden organize edilmesi ihtiyacının olmasıdır.)
Örneğin T tablomuzda “id” kolonu üzerinde “index” oldugunu varsayarsak indeks oluşturmak için aşağıdaki gibi yazabiliriz :

 

Oracle acısından bu ağacın önemine gelecek olursak , Oracle indeks yapısını  bu ağaç yapısı üzerine oturtmuştur.Yani bir kolon üzerinde bir indeks oluşturduğunuzda bu indeks (kolon değeri) ve o verinin bulundugu satır bilgisi(rowid) bu ağaçta uygun yere yerleştirilir.(ROWID,verinin fiziksel adresidir).Leaf seviyesinde ya tek bir değer olur ya da bir değer aralığı bilgisi bulunur.Ama hepsi sıralıdır.Leaf seviyeler birbirine linkli liste mantığına göre bağlıdır.

 

CREATE INDEX t_id_idx ON t(id);

Peki bu aşamada neler yaşanır? “id” kolonunun değerleri artan sırada dizilir.Degeri ve tablodaki satır adresi(rowid) bilgisi saklanır, bu şekilde indeksimiz oluşturulmuş olur.Aşağıdaki sorguya bakalım :

select * from T where id = 12345

sorgusunda normal şartlarda indeks tarama (index scan) yapılır, önce “id” değeri indeksten bulunur ve satırının rowid bilgisine ulaşılır ve rowid bilgisi ile tabloya nokta atışı yapılarak veriler getirilir. “….where id between 200 and 300…” gibi bir sorguda “leaf” ler üzerinde gezilerek aralık (range) bilgisine ulaşılır.B Tree indeks yapısında tekil(unique) olmayan bir indeks değeri yoktur.

NOT : indeks tekil (unique) bir indeks ise tekillik sağlamak sorun olmaz ama eğer indeks tekil değilse bu tekillik Oracle tarafından indeks değeri yanına rowid bilgisi eklenerek sağlanır.Tekil durumunda indekse gore bir sıra oluşturulur, tekil değil ise bu sıralama 2 değere göre birden yapılır.

Kısaca indeksler bu şekilde.Ama bunun yanında “index-Unique Scan, Index-Range Scan, Index-Skip Scan, Index-Full ScanIndex-Fast Full  Scan , Index Join, Index Rebuild” konularına bakmanızı tavsiye ederim.

 

1 ) Indeksler view’larda kullanılabilir mi? Bu sorunun cevabı aslında çokta zor değil.View , bir sorgu cümleciğinden ibarettir.Tablonuzda indeks oluşturduysanız ve view oluştururken kullandığınız sorguda indeksi kullanmasını sağladıysanız view indeks kullanır aksi halde kullanamaz.

2) Indeksler ve NULL : Bitmap indeksler ile clustered indexler hariç B*Tree yapısındaki indeksler NULL barındırmazlar.Bunu şöyle ispat etmek mümkün :create table t2 (x int, str varchar2(15));create unique index idx_t2 on t2(x)declare
begin
             insert into t2 values(1,’bir’);
             insert into t2 values(2,’iki’);
             insert into t2 values(3,’uc’);
             insert into t2 values(null,’bos’);
             commit;
end;               

declare
sqlStr varchar2(500);
begin
             sqlStr := ‘analyze index idx_t2 validate structure’;
             execute immediate sqlStr;
end;    

select name, lf_rows from index_stats

NAME               LF_ROWS
IDX_T2            3

Görüldüğü üzere T2 tablosunun (x) kolonuna unique indeks uyguladık, 4 satır ekledik ama kontrol ettiğimizde 4 değil 3 satırın indeksli oldugunu gördük.(x) kolonu NULL değeri aldığı için indekslenmemiştir.

Yine T2 tablosundan “x” kolonu için sorgu yapalım :
select * from t2 where x = 1     sorgusunda “index unique scan” ile 1 satir gelirken
select * from t2 where x is null  sorgusunda “table Access full” ile 1 satir gelmiştir.Yani indeks oluşturduğumuz “x” kolonu için NULL sorgusu yaptıgımızda indeks kullanılmamıştır.Bunun sebebi yukarıda da değindiğimiz indekslerin NULL değer içermemesidir.


2 ya da daha fazla kolon üzerinde indeks oluşturdugumuz durumlarda da kolonlardan en az birinin NOT NULL olup değer içermesi gerekir ki indeks kullanılabilsin.
NOT :  Özellikle unique indeks oluşturmak istediğimizde “NOT NULL” kısıtı koymak indeksi verimli kullanmamızı sağlayacaktır.Parent tablonun primary key alanında yapılacak bir update ya da parent tablodan bir satırın silinmesi child tabloda bir “table lock” oluşmasına neden olacaktır.Bu durumda da child tablo üzerinde hiç bir şekilde DML işlemi yapılmasına izin verilmeyecektir.Bu da “deadlock” probleminin oluşmasına davetiye çıkarır.Indekslenmemiş foreign key’ler aşağıdaki durumlarda da probleme yol açar :
 

3) Indeksler ve Foreign key : Foreign key’in indekslenip indekslenmemesi konusu aslında tamamen tasarımınız ile ilgilidir.Foreign key indekslenmediğinde bizleri bekleyen en büyük problem belkide “deadlock” oluşmasıdır.Peki bu nasıl olur?Bunu anlamak için önce şu bilgileri tekrar edelim :“child table” foreign key barındıran tablodur, “parent table” ise  foreign key’in gösterdiği alanın bulundugu tablodur.

 

i) Child tablo da “ON DELETE CASCADE” özelliği olsun ve foreign key’de indeks bulunmasın.Bu durumda parent tabloda bir verinin silinmesi durumunda child tabloda bir “full table scan” yapılmasına sebeb olunur.

ii) Parent tablodan child tabloya dogru olan sorgularda.EMP / DEPT örneği verilebilir.EMP child table, DEPT ise parent tablodur ve örnegin depname = ‘XXX’ olan çalışanları getir gibi bir sorguda sıkıntı yaşayabilirsiniz :
     Select * from emp, dept
     where emp.deptno = dept.deptno
     and dept.depname = ‘XXX’
Peki tersi durumlar, yani foreign key değerinin indekslenmesine gerek olmayan durumlar neler olabilir ? :
    a) Parent tablodan bir veri silinmeyeceğinde
    b) Parent tablonun primary/unique key değeri update edilmeyeceğinde
    c) Parent tablo ile child tablo foreign key değeri üzerinden sorgulanmayacağında.
Bu şartlarda foreign key indeklemeye gerek yoktur bu sayede DML işlemlerimizde gereksiz yere indekslenmeden dolayı bir yavaşlamaya sebeb olmayacaktır. 


Hakkı Oktay
http://hakkioktay.wordpress.com

Bu makaleyi beğendin mi? Yorumunu Yaz!







Sizden Gelen Yorumlar:

Yorum Yazın

Erkam(23.7.2010 11:44:50)
İndexlerle ilgili yararlı bir makale olmuş teşekkürler...
%78 %11 %11
Katılıyorum Çekimserim Katılmıyorum






Copyright© 2001-2020. Bilgisayar Mühendisleri Portalı | Bütün hakları saklıdır.