Veritabanı Tasarımı. İndeksler ve Eşanlamlar

Benzer belgeler
Veritabanı Tasarımı. Kullanıcı Erişimini Kontrol Etme

Veritabanı Tasarımı. Tablo Oluşturma

Veritabanı Tasarımı. Kartezyen Çarpım ve Join İşlemleri

Veritabanı Tasarımı. NOT NULL ve UNIQUE Kısıtlamaları Tanımlama

Elbistan Meslek Yüksek Okulu GÜZ Yarıyılı Ara Öğr. Gör. Murat KEÇECĠOĞLU

Veritabanı Tasarımı. Seriler ile Çalışma

Veritabanı Tasarımı. Tablo Değiştirme

SQL Komutları (2) Uzm. Murat YAZICI

Veritabanı Tasarımı. DML İşlemleri ve Görünümler

Veritabanı Tasarımı. Birincil Anahtar, İkincil Anahtar ve Kontrol Kısıtlamaları

Veritabanı Tasarımı. SQL Deyimi Anatomisi

SQL veri tabalarına erişmek ve onları kullanmak için geliştirilmiş bir lisandır.

VERĐTABANI YÖNETĐM SĐSTEMLERĐ

SQL'e Giriş. SELECT Deyimi. SQL Komutları. Yardımcı Deyimler

SORGULAR. Öğr.Gör.Volkan Altıntaş

Tablolar Arası İlşikiler ve Alan Özellikleri Siparis.musteri_no musteri.musteri_no Siparis.urun_kodu musteri.urun_kodu

Veritabanı Tasarımı. Sütun Değerlerini Güncelleme ve Satırları Silme

Veritabanı Tasarımı. İlişkisel Veritabanı Kavramlarına Giriş

Bölüm 4: DDL Veri Tanımlama Dili

Veritabanı Tasarımı. Veritabanı Hareketleri

BÖLÜM- 8: DİĞER ŞEMA NESNELERİNİ OLUŞTURMA

Veri Tabanı Yönetim Sistemleri Bölüm - 4

Veritabanı. SQL (Structured Query Language)

Elbistan Meslek Yüksek Okulu GÜZ Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU

Veritabanı Tasarımı. Sütunlar, Karakterler ve Satırlar ile Çalışma

VERİ TABANI YÖNETİM SİSTEMLERİ I

Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü Veri Tabanı ve Yönetimi (BİL 301)

BİLİŞİM TEKNOLOJİLERİ

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır.

Veri Tabanı Tasarım ve Yönetimi

VERİ TABANI YÖNETİM SİSTEMLERİ

Oracle da kullanılan veri tipleri:

SQL Kod ile Tablo Oluşturma

Veritabanı Tasarımı. Düzenli İfadeler

VERİTABANI Veritabanı Yönetimi

KISITLAMALAR (CONSTRAINT)

SQL'e Giriş. SELECT Deyimi. SQL Komutları. 1. DDL (Data Definition Language - Veri Tanımlama Dili)

VERİTABANI. SQL (Structured Query Language)

Tablolar Arası İlşikiler ve Alan Özellikleri. Şekil 1. Magaza veritabanının tabloları ve tablolar arasındaki ilişkiler

Tavsiye Edilen Önhazırlık Temel veritabanı kavramlar hakkında bilgi sahibi olmak. Hedefler Temel veritabanı güvenlik işlemlerini gerçekleştirebilmek

5 SQL- Yapısal Sorgulama Dili. Veritabanı 1

SQL (Structured Query Language)

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

YAPISAL SORGULAMA DİLİ (SQL)

SQL e Giriş. Uzm. Murat YAZICI

Veri Tabanı Yönetim Sistemleri Bölüm - 5

Veritabanı Tasarımı. Büyük/Küçük Harf ve Karakter İşleme

ACCESS PLATFORMUNDA SQL

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

Veri Tabanı Hafta Dersi

Veritabanına Uygulanması

Veri Tabanı Yönetim Sistemleri Bölüm - 7

SAKLI YORDAM (Stored Procedure) Sibel Somyürek

VERİTABANI Veritabanı Sorgulama

Veri Tabanı Programlamaya Giriş

Veritabanı Yönetim Sistemleri (Veritabanı Tasarımı) SQL (Structured Query Language)

Veri Tabanı Hafta Dersi

Advanced Oracle SQL Tuning

BÖLÜM- 9: KULLANICI ERİŞİMLERİNİ YÖNETMEK

8 Oracle da tablo yapısı içinde otomatik artan kolon yoktur. (identity kolon

BİL Bilişim Teknolojileri. Access

SQL Query and Table Application

Laboratuvar 2 Tek Kayıt Fonksiyonları

Üst Düzey Programlama

VERİ TABANI ve YÖNETİMİ

Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız.

COMMIT: Oluşturulan transaction işlemi başarılı bir şekilde gerçekleştiğinde yapılan değişikliklerin veritabanına kalıcı olarak aktarılmasıdır.

İNTERNET PROGRAMCILIĞI HAFTA. MYSQL ile VERİTABANI İŞLEMLERİ - 1. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Veritabanı Oluşturma, Silme

Veritabanı sistemlerinde veri bütünlüğünü sağlayabilmek için CONSTRAINTS olarak adlandırılan bazı zorlayıcı ifadeler kullanılabilir.

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim'

YAPISAL SORGULAMA DİLİ. BARIŞ ARIBURNU barisariburnu.com

ELIF KIOTZEOGLOU RESUL MURAD MERT PACOLARI

Birden Çok Tabloda Sorgulama (Join)

EBE-368 Veri Tabanı Yönetim Sistemleri İlişkisel Model (The Relational Model)

İLERİ VERİTABANI SİSTEMLERİ SUAT ÜSTKAN

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

SQL Deyimleri. Öğr.Gör.Volkan ALTINTAŞ Volkanaltintas.com

PostgreSQL ve PL/pgSQL

İş Zekası için Dört-Katmanlı Veri Modellemesi Gerçekleştirimi. Harun Gökçe EG Yazılım, TOBB ETÜ

1. VERİ TABANI ARAÇLARI

Oracle Database 11g: Introduction to SQL

Data Programming SQL Language. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

TEMEL BİLGİSAYAR. Ders Notları. Yrd. Doç. Dr. Seyit Okan KARA

TESİ. indeks. söylenebilir?? bir ilişkidir d) Hiçbiri. veya somutlaştırılmış. düzeyidir? sağlayabilir? sına. d) Hepsi. olabilir? c) Verilerin d) Hepsi

Genel Kavramlar. Bilgisayar ortamında işlenebilecek durumda bulunan kayıtlar. Birbiri ile ilişkili veriler topluluğu ve veriler arası ilişkiler

Aşağıdaki tabloyu inceleyin. Sorgulama işlemlerini bu tabloya göre yapacağız.

OTURUM AÇMA ADLARI. Tavsiye Edilen Önhazırlık Enterprise Manager'i kullanabilmek.

İNTERNET PROGRAMLAMA 2 A S P. N E T. Marmara Teknik Bilimler MYO / Hafta 5 Veri Tabanı İşlemleri

Lıke Joker Karakterler, Is [not] Null, Order By, Group By, As

BÖLÜM -7: TABLOLARI OLUŞTURMA VE YÖNETME

VT Sistem Gerçeklemesi. Ders Notları- #8

Veritabanı Tasarımı. Çoklu Satır Alt Sorgular

Veritabanı Tasarımı. Basit Eşleme: Dönüşüm İşlemi

İNTERNET PROGRAMCILIĞI DERSİ

ORACLE DA KÜRSÖRLER. Gerekli sistem değişkenleri

MİLLİ SAVUNMA ÜNİVERSİTESİ KARA HARP OKULU DEKANLIĞI BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ DERS TANITIM BİLGİLERİ

8 Aralık 2011 / Perşembe. Veri Tabanına Giriş

VERİ TABANI YÖNETİM SİSTEMLERİ I

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

Veri Tabanı Yönetim Sistemleri Bölüm - 6

Transkript:

Veritabanı Tasarımı İndeksler ve Eşanlamlar

Konular Bir indeks tanımlama ve şema nesnesi olarak kullanma ROWID tanımlama ve veritabanında bilgileri yerleştirmede kullanma Otomatik olarak oluşturulan bir indeksi isimlendirme koşulları CREATE INDEX ve DROP INDEX ifadelerini oluşturma ve çalıştırma Fonksiyon tabanlı bir indeks oluşturma ve çalıştırma Özel ve genel eşanlamlar oluşturma 2

Amaç Bir kitapçıya veya kütüphaneye gidiyor olduğunuzu düşünün ve tüm kitapların raflarda gerçek sırayla sıra sıra istiflenmiş olduğunu göreceksiniz. Ne aradığınızı bulmak için tek yol her satırda bulunan her kitabı incelemek olacaktır. Çok verimli olmaz değil mi? Bir veritabanında bilgi almak tamamen sıralardaki kitaplara benzerdir. Her sorgu için, tam bir tablo taraması yapılmalıdır. 3

Amaç Neyse ki, bir veritabanındaki verileri bulma her satırı incelemek zorunda olmaktan daha verimlidir. Oracle satırlara erişimi hızlandırmak için bir indeks kullanır. Bu derste, ne zaman ve nasıl bir indeks oluşturmalı ya da silinmeli bunu öğreneceksiniz. Ayrıca bu derste, veritabanı nesneleri için kullanıcı dostu isimlendirme nasıl oluşturulacağını öğreneceksiniz. Eşanlamlar nesnelere kolay isimlendirme için önemli bir yol sağlayacaktır (takma ad gibi). 4

İndeksler Oracle sunucu indeksi işaretçi kullanarak satırlara erişimi hızlandıran bir şema nesnesidir. İndeksler harici ya da otomatik olarak oluşturulur. Eğer seçtiğiniz sütunda bir indekse sahip değilseniz, tüm tablonun taranması gerekir. İndeks tablodaki satırlara doğrudan ve hızlı bir erişim sağlar. Amacı veriye hızlı bir şekilde ulaşmak için indeksli bir yol kullanarak disk I/O gereksinimini azaltmaktır. İndeks, Oracle sunucu tarafından otomatik olarak kullanılır ve onarılır. İndeks ilk kez oluştuktan sonra kullanıcı tarafından doğrudan faaliyet gerekli değildir. 5

İndeksler Bir ROWID, blok kimliği, blok satır konumu ve veritabanı dosyası tanımlayıcısı içeren satır adresinin bir 64 tabanı katar sunumudur. İndeksler, herhangi bir satıra erişmek için hızlı bir yol olduğu için ROWID kullanırlar. 6

İndeksler Not: Tabloyu kaldırdığınız zaman ilgili indekslerde kaldırılır. 7

İndeksler İndeksler, işaret ettikleri tablodan fiziksel ve mantıksal olarak bağımsızdırlar. Bu herhangi bir zamanda oluşturulup kaldırılabilecekleri anlamına gelir ve ana tablolarda ya da diğer tablolarda herhangi bir etkileri olmaz. 8

İndeks Türleri İki tür indeks oluşturulabilir. Benzersiz indeks: Oracle sunucu, bir tabloda birincil anahtar ya da benzersiz anahtar kısıtlamasına sahip olan bir sütun tanımladığınız zaman bu indeksi otomatik olarak oluşturur. İndeksin adı kısıtlamaya verilen addır. Manuel olarak benzersiz bir indeks oluşturabilmenize rağmen, benzersiz indeks oluşturan tabloda benzersiz bir kısıtlama oluşturmanız tavsiye edilir. 9

İndeks Türleri İki tür indeks oluşturulabilir. 1. Benzersiz indeks: Oracle sunucu, bir tabloda birincil anahtar ya da benzersiz anahtar kısıtlamasına sahip olan bir sütun tanımladığınız zaman bu indeksi otomatik olarak oluşturur. İndeksin adı kısıtlamaya verilen addır. Manuel olarak benzersiz bir indeks oluşturabilmenize rağmen, benzersiz indeks oluşturan tabloda benzersiz bir kısıtlama oluşturmanız tavsiye edilir. 2. Benzersiz Olmayan İndeks: Kullanıcının satırlara ulaşmak için oluşturabileceği indekstir. Örneğin, join işlemlerini optimize etmek için ikincil anahtar sütununda birincil anahtara eşleşen satırları aramayı hızlandırmak için bir indeks oluşturabilirsiniz. 10

İndeks Oluşturma Bir ya da daha çok sütun üzerinde CREATE INDEX komutu kullanarak bir indeks oluşturma: Şemanızda bir indeks oluşturmak için tablo oluşturma yetkinizin olması gerekir. Herhangi bir şemada bir indeks oluşturmak için CREATE ANY INDEX yetkisine ya da ilgili tabloda tablo oluşturma yetkisine sahip olmanız gerekir. Null değerler indekste yer almaz. 11

İndeks Oluşturma Örneğin, DJs on DemandD_CDS tablosunda TITLE sütununa erişmek için sorguyu hızlandırmak isteyelim: 12

Ne Zaman İndeks Oluşturulur Bir indeks sadece şu durumlarda oluşturulur: Sütun değerler için geniş bir aralık içeriyorsa Bir sütun çok sayıda null değerler içeriyorsa Bir ya da daha fazla sütun birlikte WHERE deyiminde ya da join koşulunda sık olarak kullanılıyorsa Tablo büyük ve sorguların çoğu satırların %2-4 oranın altında erişiliyorsa. 13

Ne Zaman İndeks Oluşturulmaz Bir dizin oluşturup oluşturmamaya karar verirken, fazlası her zaman daha iyi değildir. İndeksler ile bir tablo üzerinde yapılan her DML işlemi (INSERT, UPDATE, DELETE), indekslerin güncellenmesi gerektiği anlamına gelir. Tablo ile daha fazla indeks ilişkilendirdiğiniz zaman DML işlemlerinden sonra tüm indeksleri güncellemek için daha fazla çabaya ihtiyacınız olacaktır. 14

Ne Zaman İndeks Oluşturulmaz Genellikle şu durumlarda bir indeks oluşturmaya değmez: Tablo küçük ise Sütunlar genellikle sorguda bir koşul olarak kullanılmıyorsa Sorguların çoğu tablodaki satırların % 2-4 ten fazlasını alması bekleniyorsa Tablo sık güncelleniyorsa İndeksli sütunlar ifadenin bir parçası olarak gösteriliyorsa 15

Birleşik İndeks Birleşik indeks bir tablodaki birden çok sütun üzerinde oluşturulmuş bir indekstir. Birleşik indeksteki sütunlar herhangi bir sırada görülebilir ve tabloda bitişik olması gerekmez. Birleşik indeksler WHERE deyiminin birleşik indeksteki sütunların tümünü ya da önemli bir bölümünü işaret ettiği SELECT komutları için veri almayı hızlandırabilir. 16

Birleşik İndeks Null değerler birleşik indekslerde yer almaz. Join işlemlerini optimize etmek için ikincil anahtar sütununda birincil anahtar sütununa eşleşen satırları aramada hızlanmak için bir indeks oluşturulur. WHERE deyimi IS NULL ifadesi içeriyorsa iyileştirici bir indeks kullanmaz. 17

İndeksleri Onaylama İndekslerin varlığını USER_INDEXES veri sözlüğü görünümünden onaylayın. Ayrıca bir indekste yer alan sütunları USER_IND_COLUMNS görünümü sorgulayarak kontrol edebilirsiniz. Bir sonraki sayfada gösterilen sorgu USER_INDEXES tablosu (indekslerin adları ve benzersizlikleri) ve USER_IND_COLUMNS tablosu (indekslerin adları, tablo adları ve sütun adları) arasındaki birleşimdir. 18

İndeksleri Onaylama 19

Fonksiyon Tabanlı İndeksler Fonksiyon tabanlı bir indeks, indekslenen değerleri tutar ve veriye erişmek için SELECT ifadesine dayanan indeksi kullanır. Fonksiyon tabanlı bir indeks, ifadelere dayalı bir indekstir. İndeks ifadesi tablo sütunlarından, kısıtlamalardan, SQL fonksiyonlardan ve kullanıcı tanımlı fonksiyonlardan oluşturulur. 20

Fonksiyon Tabanlı İndeksler Fonksiyon tabanlı indeksler veritabanında verinin hangi koşullarda tutulduğunun bilinmediği durumlarda kullanışlıdır. Örneğin, WHERE deyiminde UPPER kullanarak SELECT ifadesi ile kullanılan fonksiyon tabanlı bir indeks oluşturabilirsiniz. İndeks bu arama için kullanılacaktır. 21

Fonksiyon Tabanlı İndeksler UPPER(sütun_adı) ya da LOWER(sütun_adı) anahtar kelimeleri ile tanımlanan fonksiyon tabanlı indeksler harf duyarsız aramalara izin verir. Şayet veritabanına çalışan soyadının nasıl girildiğini bilmiyorsanız SELECT ifadesinde büyük harf girerek indeks kullanabilirsiniz. Bir sorgu WHERE deyiminde bir ifade kullanılarak değiştirildiği zaman indeks ifadeyi eşleştirmek için fonksiyon tabanlı bir indeks oluşturmadıkça onu kullanmaz. 22

Fonksiyon Tabanlı İndeksler Örneğin, aşağıdaki ifade indeks kullanarak harf duyarsız aramalara izin verir: 23

Fonksiyon Tabanlı İndeksler Oracle sunucunun tam bir tablo taraması yapmak yerine indeks kullanmasını sağlamak için sonraki sorgularda fonksiyon değerinin null olmadığından emin olun. Örneğin, aşağıdaki deyim indeks kullanmak için garantilidir ancak WHERE olmadan Oracle sunucu tam bir tablo taraması yapabilir: Oracle sunucu indeksleri fonksiyon-tabanlı indeksler olarak DESC işaretli olan sütunlarla işler. DESC işaretli olan sütunlar azalan sırada listelenir. 24

Fonksiyon Tabanlı İndeksler Tüm bu örnekler UPPER VE LOWER fonksiyonlar kullanır fakat Oracle veritabanı bunlarla sınırlı değildir. Herhangi geçerli bir Oracle dahili fonksiyonu kendinizin yazdığı veritabanı fonksiyonu olarak kullanılabilir. Kendi fonksiyonlarınızı yazıyorsanız fonksiyon tabanlı bir indekste kullanmak için fonksiyon başlığında DETERMINISTIC anahtar kelimesini içermelidir. 25

Fonksiyon Tabanlı İndeksler Matematikte, deterministtik sistem sistemin gelecekteki durumunda rastgelelik içermeyen bir sitemdir. Deterministik modeller bu nedenle belirlenmiş bir başlangıç durumu için aynı çıktıyı üretir. Oracle da deterministik aynı girdiler verildiğinde hep aynı çıktıyı dönen bir işlev bildirir. Oracle a işlevin deterministik olduğunu söylemek gerekir ve verilen aynı girdiler için tutarlı bir sonuç dönecektir. 26

Fonksiyon Tabanlı İndeksler UPPER, LOWER ve TO_CHAR yerleşik SQL fonksiyonlarının tümü Oracle tarafından deterministik olarak tanımlanır. Bu nedenle bu üç fonksiyondan herhangi birini kullanarak bir sütun üzerinde bir dizin oluşturabilirsiniz. 27

Fonksiyon Tabanlı İndeksler Fonksiyon tabanlı indekslere başka bir örnek burada verilmektedir. d_events tablosu mayıs ayı için planlanan bir etkinlik olup olmadığını bulmak için sorgulanır. Gördüğünüz üzere, bu sorgu tablo büyükse çok pahalı bir işlem olan tam tablo taramasında sorgulanır. Hatta event_date sütunu indekslenir ve indeks TO_CHAR ifadesi nedeniyle kullanılmaz. 28

Fonksiyon Tabanlı İndeksler İndeks tabanlı aşağıdaki fonksiyonu oluşturduktan sonra, aynı sorguyu çalıştırabilirsiniz, ancak bu sefer pahalı tam tablo taramasından kaçının. Şimdi Oracle events_date sütununda indeks kullanabilir. 29

İndeksi Kaldırma İndeksleri değiştiremezsiniz. Bir indeksi değiştirmek için onu kaldırmalı ve tekrardan oluşturmalısınız. Veri sözlüğünden DROP INDEX komutu kullanarak bir indeks tanımını kaldırın. İndeksi kaldırmak için indeksin sahibi olmanız ya da DROP ANY INDEX yetkisine sahip olmanız gerekir. Tabloyu kaldırırsanız indeksler ve kısıtlamalar otomatik olarak kaldırılır fakat görünümler ve seriler kalır. 30

İndeksi Kaldırma Sözdizimi (index: indeksin adı): 31

Eşanlam SQL de bir eşanlam başka bir kelimenin yerine kabul edilen bir kelime ya da ifadedir. Eşanlamlar nesne için başka bir ad oluşturarak nesnelere kolayca erişim sağlamak için kullanılır. Eşanlamlar başka bir kullanıcı tarafından sahip olunan tabloya daha kolay ve kısa uzunluklu nesne adları ile erişmeyi sağlar. 32

Eşanlam Örneğin, sınıf arkadaşınızın şemasında amys_copy_d_track_listings tablosunu belirtmek için tablo adını kullanıcı adı ile birlikte USMA_SBHS_SQL01_S04.amy gibi başa ekleyebilirsiniz. 33

Eşanlam Bir eşanlamlı oluşturma, nesne adını şema ile niteleme ihtiyacını ortadan kaldırır ve tablo, görünüm, seri, prosedür ya da diğer nesne için alternatif bir isim sağlar. Bu yöntem, görünümler gibi uzun nesne adları ile özellikle yararlı olabilir. Veritabanıyöneticisi tüm kullanıcılar için erişilebilir genel bir eşanlamlı oluşturabilir ve özellikle CREATE PUBLIC SYNONYM yetkisini herhangi bir kullanıcıya verebilir ve bu kullanıcı genel eşanlamlar oluşturabilir. 34

Eşanlam Sözdiziminde: PUBLIC: tüm kullanıcılar tarafından erişilebilir bir eşanlam oluşturur synonym: oluşturulan eşanlamın adıdır object: oluşturulan eşanlam nesnesinin belirtir. 35

Eşanlam Kuralları Kurallar Nesne bir paket içinde ihtiva edilemez. Özel bir eşanlamlı ismi aynı kullanıcı tarafından sahip olunan tüm diğer nesnelerden farklı olmalıdır. Eşanlamı kaldırmak için: 36

Eşanlamı Onaylama Eşanlamların varlığı USER_SYNONYMS veri sözlüğü görünümü sorgulanarak onaylanabilir. Sütun Adı Synonym_name Table_name Table_owner Db_link İçerik Eşanlam adı Eşanlam tarafından belirtilen nesnenin sahibi Eşanlam tarafından belirtilen nesnenin adı Uzak bir eşanlamda belirtilen veritabanı bağlantısı 37