Date post: | 21-Jul-2015 |
Category: |
Technology |
Upload: | atilla-oezguer |
View: | 296 times |
Download: | 0 times |
İndekslemeye Giriş 1Atilla Özgür
Atilla Özgür
Türkiye İş Kurumu - İŞKUR
11-12-2013
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 1 / 41
1 Giriş
2 İndeks Anatomisiİndeks Nedir
3 WHERE
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 2 / 41
Giriş
Contents
1 Giriş
2 İndeks Anatomisiİndeks Nedir
3 WHERE
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 3 / 41
Giriş
SQL Performance Explained
Sadace B Tree İndeksleri anlatan bir kitapweb üstünden okunabiliyor.http://sql-performance-explained.comhttp://use-the-index-luke.com/sql/table-of-contentsYazarı Markus Winand
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 4 / 41
Giriş
Yazılım Geliştiriciler İndeksleme Yapmalı
İndeks Oluşturma bir yazılım geliştirme görevidir.Yazılım Hızı neye bağlıdır.
Donanım ⇓Storage ⇓Uygulama, sorguları nasıl çalıştırır. ⇑
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 5 / 41
Giriş
B-Tree İndeks
Tüm veri tabanlarında hemen hemen aynı şekilde çalışır.OracleSQL ServerDB2MySQLPostgreSQL
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 6 / 41
İndeks Anatomisi
Contents
1 Giriş
2 İndeks Anatomisiİndeks Nedir
3 WHERE
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 7 / 41
İndeks Anatomisi İndeks Nedir
İndeks Anatomisi - İndeks Nedir
İndeks, Sorguları Hızlandırır.İndeks, kısaca kitapların arkasındaki İndeks ile aynı işlevi görür.
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 8 / 41
İndeks Anatomisi İndeks Nedir
İndeks Anatomisi - İndeks Nedir
İndeks CREATE INDEX komutu ile üretilen ayrı bir yapıdır.Tablolardan ayrı bir yerde tutulur.Tablo içindeki bilgilerin istediğiniz bir alt kümesinin bir kopyasını tutar.İndeks bilgi saklama açısından TAMAMIYLA bir TEKRARDIR.
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 9 / 41
İndeks Anatomisi İndeks Nedir
İndeks içinde Arama
Telefon Rehberinde Arama gibiTelefon numaralarının sahibi bir sıra ile yazılmıştır.
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 10 / 41
İndeks Anatomisi İndeks Nedir
Veritabanı - İndeks
Doubly Linked ListSearch Tree
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 11 / 41
İndeks Anatomisi İndeks Nedir
İndeks Anotomisi - CLUSTERED INDEX
Daha sonra artı ve eksilerini konuşacağımız bir yapı.SQL ServerMySQL InnoDBOracle - Index Organized Table
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 12 / 41
İndeks Anatomisi İndeks Nedir
Balanced Search Tree , B-Tree Örnek 1
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 13 / 41
İndeks Anatomisi İndeks Nedir
Balanced Search Tree - B-Tree Demo
http://goneill.co.nz/btree-demo.php
Link - Javascripthttp://csilm.usu.edu/lms/nav/activity.jsp?sid=__shared&cid=usu@mills&lid=53
Link - Javas Applet
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 14 / 41
İndeks Anatomisi İndeks Nedir
Balanced Search Tree
B-Tree; Binary Tree DeğilB-Tree; Balanced Search Treeİndeks oluşturulduktan sonra, yapılan her Insert, Delete ve Update ekstrazaman alır.
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 15 / 41
İndeks Anatomisi İndeks Nedir
Doubly Linked ListProgramming Language NameJava java.util.LinkedList.NET System.Collections.Generic.LinkedListC++ std::list
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 16 / 41
İndeks Anatomisi İndeks Nedir
Tablo Yapısı 1 - Heap
Veriyi sıralı tutmak uygun değildir.Yapılan Insert’ler çok zaman alacaktır.Araya yapılan Insert’lerde, yer açmak için, verinin taşınması gereklidir.Bunun yerine tablo içindeki veriler HEAP yapısında hiç sıralanmadantutulur.oracle rowid pseudo column
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 17 / 41
İndeks Anatomisi İndeks Nedir
İndeks Yaprak Düğüm - Tablo Verisi
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 18 / 41
İndeks Anatomisi İndeks Nedir
Balanced Search Tree - Arama
B-Tree: Balanced Search TreeOluşturulduktan sonra her Insert, Delete ve Update zaman alır.
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 19 / 41
İndeks Anatomisi İndeks Nedir
Balanced Search Tree - Arama Ornek1
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 20 / 41
İndeks Anatomisi İndeks Nedir
Tree Traversal
Çok Verimlidir. İndeksin 1. GÜCÜBüyük veri setlerinde bile anında çalışır.Bu hızlı çalışmasının sebebi ağacın dengeli olmasıdır.Ağacın dengeli olması sayesinde, aynı adım sayısında tüm elemanlaraerişilebilir.Yaprak nod’larına göre ağaç çok yavaş büyür.Gerçek dünyada milyonlarca kayıt , 4-5 derinlikte ağaçlarda tutulur.
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 21 / 41
İndeks Anatomisi İndeks Nedir
Logaritmik Ölçeklenebilirlik
Node başına 4 kayıt3 43 644 44 2565 45 10246 46 40967 47 16,3848 48 65,5369 49 262,14410 410 1,048,576
Gerçek veritabanlarında node başına 100’lerce kayıt tutulmaktadır.
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 22 / 41
İndeks Anatomisi İndeks Nedir
İndeks Lookup
İndeks Lookup 3 aşamadan oluşur.
Ağaç İçinde GezmeYaprak Nodlarını izlemeTablodan Veri Alma
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 23 / 41
İndeks Anatomisi İndeks Nedir
İndeks Lookup
İndeksin yavaş çalışmasını 1. adım değil , 2 ve 3. adım neden olur. Özellikletablodan verileri alma, yüzlerce kayıt için sabit disk üstünde farklı farklı bloklaragitmeye neden olabilir.
Ağaç İçinde GezmeYaprak Nodlarını izlemeTablodan Veri Alma
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 24 / 41
İndeks Anatomisi İndeks Nedir
Yavaş Çalışan İndeksler
Veriye ulaşımın yavaşlamasından dolayı aşağıdaki mit ortaya çıkmıştır.
Degenerated Index Myth - Çözüm Index Rebuilt
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 25 / 41
İndeks Anatomisi İndeks Nedir
İndeks LookupYAPILAN İŞLEM ORACLE Explain Plan İsimAğaç İçinde Gezme INDEX UNIQUE SCANYaprak Nodlarını izleme INDEX RANGE SCANTablodan Veri Alma TABLE ACCESS BY INDEX ROWID
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 26 / 41
İndeks Anatomisi İndeks Nedir
ağaç İçinde Gezme - INDEX UNIQUE SCAN
EXPLAIN PLAN SET STATEMENT_ID = ’ KISI−INDEX−UNIQUE−SCAN1 ’ FOR
SELECT TCKIMLIKNO FROM ORTKISIWHERE TCKIMLIKNO = 93793463921;
SELECT ∗FROM TABLE(DBMS_XPLAN. DISPLAY) ;
Listing 1: INDEX UNIQUE SCAN
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 27 / 41
İndeks Anatomisi İndeks Nedir
ağaç İçinde Gezme - INDEX UNIQUE SCAN - Sonuç
plan SET succeeded.PLAN_TABLE_OUTPUT------------------------------------------------------------------------------------------------------Plan hash value: 2221460502
------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 8 | 2 (0)| 00:00:01 ||* 1 | INDEX UNIQUE SCAN| UQ_ORTKISITCKIMLIKNO | 1 | 8 | 2 (0)| 00:00:01 |------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):---------------------------------------------------
1 - access("TCKIMLIKNO"=93793463921)
Note-----
- ’PLAN_TABLE’ is old version
17 rows selected
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 28 / 41
İndeks Anatomisi İndeks Nedir
Yaprak Nodlarını izleme - INDEX RANGE SCAN
EXPLAIN PLAN SET STATEMENT_ID = ’ KISI−INDEX−RANGE−SCAN1’ FOR
SELECT AD FROM ORTKISIWHERE AD = ’ATİ LLA ’ ;
SELECT ∗FROM TABLE(DBMS_XPLAN. DISPLAY) ;
Listing 2: INDEX RANGE SCAN
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 29 / 41
İndeks Anatomisi İndeks Nedir
Yaprak Nodlarını izleme - INDEX RANGE SCAN - Sonuç
plan SET succeeded.PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------Plan hash value: 710634996--------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |--------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 7594 | 53158 | 40 (0)| 00:00:01 ||* 1 | INDEX RANGE SCAN| NI_ORTKISIADSOYAD | 7594 | 53158 | 40 (0)| 00:00:01 |--------------------------------------------------------------------------------------
Predicate Information (identified by operation id):---------------------------------------------------
1 - access("AD"=’ATİLLA’)
Note-----
- ’PLAN_TABLE’ is old version
17 rows selected
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 30 / 41
İndeks Anatomisi İndeks Nedir
Tablodan Veri alma - TABLE ACCESS BY INDEX ROWID
EXPLAIN PLAN SET STATEMENT_ID = ’ KISI−IX−TABLE−ACCESSBYROWID1 ’ FOR
SELECT AD,SOYAD,TCKIMLIKNO FROM ORTKISIWHERE AD = ’ATİ LLA ’ ;
SELECT ∗FROM TABLE(DBMS_XPLAN. DISPLAY) ;
Listing 3: TABLE ACCESS BY INDEX ROWID
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 31 / 41
İndeks Anatomisi İndeks Nedir
Tablodan Veri alma - TABLE ACCESS BY INDEX ROWID- Sonuç
plan SET succeeded.PLAN_TABLE_OUTPUT-------------------------------------------------------------------------------------------------Plan hash value: 3641287235
-------------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |-------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 7594 | 163K| 7728 (1)| 00:01:33 || 1 | TABLE ACCESS BY INDEX ROWID| ORTKISI | 7594 | 163K| 7728 (1)| 00:01:33 ||* 2 | INDEX RANGE SCAN | NI_ORTKISIADSOYAD | 7686 | | 40 (0)| 00:00:01 |-------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):---------------------------------------------------
2 - access("AD"=’ATİLLA’)
Note-----
- ’PLAN_TABLE’ is old version
18 rows selected
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 32 / 41
İndeks Anatomisi İndeks Nedir
Tablodan Veri alma - TABLE ACCESS BY INDEX ROWID
EXPLAIN PLAN SET STATEMENT_ID = ’ KISI−IX−TABLE−ACCESSBYROWID1 ’ FOR
SELECT AD,SOYAD,TCKIMLIKNO FROM ORTKISIWHERE TCKIMLIKNO = 93793463921;
SELECT ∗FROM TABLE(DBMS_XPLAN. DISPLAY) ;
Listing 4: TABLE ACCESS BY INDEX ROWID
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 33 / 41
İndeks Anatomisi İndeks Nedir
Tablodan Veri alma - TABLE ACCESS BY INDEX ROWID- Sonuç
plan SET succeeded.PLAN_TABLE_OUTPUT---------------------------------------------------------------------------------------------------Plan hash value: 1269355606
----------------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |----------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 22 | 3 (0)| 00:00:01 || 1 | TABLE ACCESS BY INDEX ROWID| ORTKISI | 1 | 22 | 3 (0)| 00:00:01 ||* 2 | INDEX UNIQUE SCAN | UQ_ORTKISITCKIMLIKNO | 1 | | 2 (0)| 00:00:01 |----------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):---------------------------------------------------
2 - access("TCKIMLIKNO"=93793463921)
Note-----
- ’PLAN_TABLE’ is old version
18 rows selected
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 34 / 41
WHERE
Contents
1 Giriş
2 İndeks Anatomisiİndeks Nedir
3 WHERE
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 35 / 41
WHERE
Where Kelimesi
Kötü yazılmış bir "WHERE", yavaş çalışan sorgunun en büyük nedenidir.
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 36 / 41
WHERE
Eşitlik == Operatörü
En basit ve en çok kullanılan operatörYinede çok hata yapılabiliyor.Özellikle birden fazla kriterin kullanıldığı sorgularda bu durum yaygın.
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 37 / 41
WHERE
Eşitlik == Operatörü - INDEX UNIQUE SCAN
PK ile yapılan Arama Örnek 1 - Kod Listesi 1Bu tür bir sorgu yavaş çalışmaz çünkü tanım olarak zaten sadece 1 kayıtgetirir.Burada dikkat edilmesi gereken İndeks içinde olan bilgi sadece çekiliyor.
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 38 / 41
WHERE
Eşitlik == Operatörü - INDEX UNIQUE SCAN
PK ile yapılan Arama Örnek 2 , Kod Listesi 4Bu Sorguda İndeks içinde olmayan bilgiler için tabloya ulaşım var.Bundan dolayı daha önce konuştuğumuz gibi yavaş çalışma olasılığı var.
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 39 / 41
WHERE
Eşitlik == Operatörü - Concatenated Index
PK ile yapılan Arama Örnek 2 , Kod Listesi 4Bu Sorguda İndeks içinde olmayan bilgiler için tabloya ulaşım var.Bundan dolayı daha önce konuştuğumuz gibi yavaş çalışma olasılığı var.
Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 40 / 41