Herkesin cevabını merak ettiği TC kimlik numarasında hangi veri tipi kullanılır sorusuna cevap bulacağız. Bu konu üzerine konuşulan varchar-char, integer, text veri tipilerinden hangisini kullansak daha verimli bir sonuç elde ederiz? sorusuna bizde bugün pg_size_pretty ve pg_relation_size fonksiyonlarını kullanarak hangi veri tiplerinin daha uygun olduğunu öğreneceğiz.

pg_size_pretty fonksiyonu ile de integer değerleri daha okunabilir bir formata çevirmek için kullanılır.  Veritabanı boyutlarını daha kolay görmemizi sağlar. BYTES, KB, MB,GB veya TB kullanılabilir.

pg_relation_size fonksiyonu ise tablonun, indeks ve toast tablosunun diskte kapladığı alanı gösterir.

Hazır da ' veritipleri ' adında boş bir veritabanım var. Boş veritabanın boyutunu görmek için 

SELECT pg_size_pretty (pg_database_size ('veritipleri')); sorgusunu yazarak veritabanımızın boyutunu görebiliriz.

 

 

 

 

 

Oluşturacağız tablolar da TC kimlik numarasını 11 haneli olacak şekilde bir fonksiyon yazalım.

 

 

 

 

INTEGER VERİ TİPİ

Integer veri tiplerini rakamsal ifadeler için kullanırız. Ondalıklı veya kesirli sayıları kabul etmez ve yalnızca tam sayı değeri girmeniz gerekmektedir.

Değer Aralığı : -2147483648  ile +2147483647 arasında değer almaktadır. Bellek üzerinde kapladığı alan “4 Bayt” dır.

integer adındaki tablomuza integer tipinde 1.000.000 kayıt ekleyelim.


 


' ERROR:  value "78699224923" is out of range for type integer ' hatası ile karşılaştık. TC kimlik numarası 11 haneli  integer veri tipimizin değer aralığından daha büyük olduğundan integer veri tipini kullanamayız.

 

TEXT VERİ TİPİ

Çok fazla alfa nümerik  için ve değişken uzunluktaki verileri saklamak için kullanılır. Text veri tipi Maksimum 2 gigabyte (1.073.741.824 karakter) veri saklar. varchar(MAX)’ın gelmesiyle kullanımı yavaş yavaş azalmaktadır.


'text ' adında varolan tabloma text tipinde 1.000.000 kayıt ekleyelim.

 


 

SELECT pg_size_pretty(pg_relation_size('text'));  sorgusu ile boyutunu görelim.

 

 

 

 

Text veri tipinde oluşturduğumuz 1.000.000 TC kimlik numarasının 42 MB yer kaplamaktadır.

'text_index' adında bir index oluşturalım ve boyutunu görelim. Oluşturduğumuz index'leri \d text_index komutuyla içeriklerini görüntüleyebiliriz.

 

 

 

 

 

 

 

 

Oluşturduğumuz 'text_index' boyutumuz 30 MB yer kaplamaktadır.

SELECT pg_size_pretty(pg_total_relation_size('text')); sorgusu ile indexler dahil toplam kapladığı alanı görelim.







 

NOT: pg_total_relation_size ile pg_relation_size fonksiyonlarının arasındaki fark : pg_total_relation_size fonksiyonu tablonun indeks dahil boyutlarını verir. pg_relation_size fonksiyonu ise indeks hariç boyutunu verir.

BIGINIT VERİ TİPİ

8 byte'lık yer kaplayan tamsayı veri türüdür. Veritabanında yer kazanmak için mümkün olan tüm değerleri güvenilir şekilde içerebilen en küçük veri türlerinden biridir.  


Bu veri türü, -2^63 den  2^63-1’e kadar tüm sayıları kullanmamızı sağlar. Yaklaşık olarak eksi 92 kentilyon ile artı 92 kentilyon demektir. 


'bıgınt' adındaki tablomuza varchar tipinde 1.000.000 kayıt ekleyelim.

 

 

 

SELECT pg_size_pretty(pg_relation_size('bigint')); boyutumuzu görelim.

 

 

 

 

 

 

Bigint tipinde belirlediğim  1.000.000 TC kimlik numarası 35 MB yer kaplamaktadır.

'bigint_index' adında bir index oluşturalım ve index'in boyutunu görelim. 

 

 

 

 

 

 

 

Oluşturduğumuz 'bigint_index' boyutumuz 21 MB yer kaplamaktadır.

SELECT pg_size_pretty(pg_total_relation_size('bigint'));  sorgusu ile  indexler dahil toplam kapladığı alanı görelim.

 

 

 

 

 

 

VARCHAR( ) VERİ TİPİ

Varchar veri tipi en fazla 8000 byte'lık ASCII formatında ve değişken uzunlukta veri saklamak için kullanılır. Varchar(n) değişebilen uzunlukta bir karakterdir ve metin tipi verileri saklar. Hafıza çok esnek ve hızlı olduğundan dolayı, bir metnin uzunluğunu değiştirmemiz oldukça kolaydır. Varchar'dan sonra yazılan sayı, o kolona girebilecek en çok karakteri belirtir. 

Örneğin isim varchar(20), isim adında bir kolon tanımladık ve uzunluğunu en fazla 20 olarak belirledik. Bu limitin dışına çıkılmadığı sürece bu kolona, istenilen uzunlukta isim girebiliriz.


'varchar' adındaki tablomuza varchar tipinde 1.000.000 kayıt ekleyelim.

 

 

SELECT pg_size_pretty(pg_relation_size('varchar')); boyutumuzu görelim.

 

 




Varchar tipinde belirlediğim  1.000.000 TC kimlik numarası 84 MB yer kaplamaktadır.


'varchar_index' adında bir index oluşturalım ve index'in boyutunu görelim. 

 

 

 

 

 

 

 

 

Oluşturduğumuz 'varchar_index' boyutumuz 30 MB yer kaplamaktadır.

SELECT pg_size_pretty(pg_total_relation_size('varchar'));  sorgusu ile  indexler dahil toplam kapladığı alanı görelim.

 

 

 

 

CHAR( ) VERİ TİPİ

Sabit uzunlukta karakter dizisi olabilir. En fazla 8000 karakter(8000 byte) olabilir. İçine alacağı verinin uzunluğu tam belli olduğu zaman kullanılır. Devamlı olarak tamamı benzer veya eşit uzunlukta (örneğin telefon alan kodu, telefon, vergi no, TC kimlik numarası... gibi) veriler üzerinde çalışıyorsak char veri tipi kullanılır.

'char' adlı tablomuza char tipinde 1.000.000 kayıt ekleyelim.

 

 

SELECT pg_size_pretty(pg_relation_size('char')); sorgusu ile tablomuzun boyutunu görelim.

 

 

 

 

Char tipinde belirlediğim 1.000.000 TC kimlik numarası 42 MB yer kaplamaktadır.

'char_index' adında bir index oluşturalım ve boyutunu görelim.

 

 

 

 

 

 

 

 

 

SELECT pg_size_pretty(pg_total_relation_size('char'));  sorgusu ile indexler dahil toplam kapladığı alanı görelim.

 

 

 

 

Oluşturduğumuz veritabanlarını daha detaylı görebilmek için \l+ komutunu kullanıyoruz.

 

 

 

 

SONUÇ

İncelediğimiz veri tiplerine göre INTEGER( ) veri tipinin boyutu TC Kimlik numarası için yeterli gelmemektedir. VARCHAR( ) veri tipi ise indexler dahil 115 MB yer kaplamaktadır. TEXT ve CHAR( ) veri tiplerimizin indexler dahil boyutu 72 MB yer kapladığı için TEXT ve CHAR( ) veri tiplerimizin 1.000.000 kayıtı ekleme sürelerine bakarak bir şeçim yapabiliriz. TEXT veri tipimiz 7.605 ms'de kayıt eklemekte, CHAR( ) veri tipimiz ise 7.847 ms' de kayıt eklemektedir. BIGINT veri tipimiz ise indexler dahil 56 MB yer kaplamaktadır. Daha az boyuta sahip olması ve daha hızlı çalışması bigint veri tipini ön planda tutmaktadır.

 

Veri tipleri ile ilgili daha detaylı bilgi almak için https://sedahalacli.blogspot.com/2018/07/postgresql-sayisal-veri-tipleri.html#more adresini inceleyebilirsin

No comments

Add Comment

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.
E-Mail addresses will not be displayed and will only be used for E-Mail notifications.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Submitted comments will be subject to moderation before being displayed.