41
İndekslemeye Giriş 1 Atilla Ö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

Indexing Eğitim1

Embed Size (px)

Citation preview

İ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

WHERE

Eşitlik == Operatörü - Full Table Scan

EXPLAIN PLAN FOR

SELECT BABAAD FROM ORTKISIWHERE BABAAD = ’ATİ LLA ’ ;

SELECT ∗FROM TABLE(DBMS_XPLAN. DISPLAY) ;

Listing 5: FULL TABLE SCAN

Atilla Özgür (Türkiye İş Kurumu - İŞKUR) İndekslemeye Giriş 1 11-12-2013 41 / 41