Veritabanı Optimizasyonu

MySQL Yorum yapılmamış »

Bu makalede MySQL’i daha az yormak, sorguların işleniş zamanlarını kısaltmak, sitenizi hızlandırmak için birtakım veritabanı optimizasyonu tavsiyelerinde bulunacağım.

Eğer kendi kodlamalarınızla veritabanı kullanacaksanız birçok mysql sorgusu ile boğuşmak durumunda kalabilirsiniz. Kullandığınız tablolar çok fazla veri içerebilir. MySQL sunucusu bu verileri işlerken tüm veritabanındaki bilgileri kontrol etmek zorunda kalıyor olabilir. Şimdi ideal bir sorgu yapısını örnekleyelim:

1. Sadece gerekli sütunları sunucudan isteyin:

Tüm sütunları istemek demek, MySQL sunucusunun fazladan ve gereksiz veri göndermesi demektir. Örneğin bir tablodaki sadece başlık ve tarih kısmını kullanmamız gerekiyorsa bunu SELECT [sütunlar] bölümünde belirtmeliyiz.

1
2
3
4
5
# Yanlış Kullanım:
SELECT * FROM haberler LIMIT 0, 10;
 
# Doğru Kullanım:
SELECT baslik, tarih FROM haberler LIMIT 0, 10;

2. ORDER BY rand() kullanımından kaçının.

Gelen verilerin sırasını bildirmemize yarayan ORDER BY komutunun yanında eklenen rand() verilerin rastgele getirilmesini ister. Fakat bu özellikle binlerce kayıt bulunan bir tabloda sunucuya extra yük bindirir. Yaklaşık 120000 kayıtlı bir tabloda rand() kullanırsak en az 0.3 saniye sürecektir sorgumuz. Oysa ideal bir sorgu 0.001-0.005 ms harcamalıdır.

1
2
# Yanlış Kullanım:
SELECT * FROM sarki_sozleri ORDER BY rand() LIMIT 0, 10;

Eğer illa ki rastgele veri almak istiyorsanız, bu işi PHP’de de yapabileceğinizi unutmayın. Böylelikle yük MySQL’den kalkacaktır.

3. INDEX kullanın.

MySQL’de verileri hızlı bir biçimde sıralamak ve karşılığında gelen veriyi bulmak için INDEX yaratmalıyız. Özellikle en çok kullanılan sütunlar için INDEX yaratırsak sunucu daha az zamanda verileri bulacaktır:

İki yolla index ekleyebilirsiniz:

1
2
3
4
5
# 1. Yol
ALTER TABLE tablo_adi ADD INDEX index_adi (sutun1, sutun2, ...);
 
# 2. Yol
CREATE INDEX index_adi ON tablo_adi (sutun1, sutun2, ...);
1
2
3
4
5
# Örneğin aşağıdaki tarz bir sorguyu sıkça kullanıyorsak:
SELECT baslik FROM haberler WHERE dosya = "dosya_adi" AND kategori = "1";
 
# Aşağıdaki gibi bir index yaratma yoluna gidebiliriz:
CREATE INDEX l_dosya_kat ON haberler (dosya, kategori);

Böylelikle bu tarz sorgular daha az zaman harcayacaktır.

Eğer tablodaki CHAR, VARCHAR, TEXT gibi yazı içeren verilerde LIKE “%kelime%” tarzı aramalar gerçekleştiriyorsanız. FULLTEXT INDEX’i kullanabilirsiniz.

1
2
3
4
5
# Şarkı sözü tablomuzda sözlerin bulunduğu sütuna bunu ekliyoruz.
CREATE FULLTEXT INDEX l_sozler ON sarkisozleri (sozler);
 
# Ve eğer sözlerde arama yapacaksak bunu kullanmamız yeterli:
SELECT isim, soz FROM sarkisozleri WHERE MATCH(sozler) AGAINST('kelime');

Yukarıdaki örnek çalıştırılsaydı içinde “kelime” geçen tüm şarkı sözleri sorgu sonucu olarak yansıtılırdı.

Umarım sizlere faydalı olur bu yazı.

Unutmadan HTML Dersleri sayfamızdan sonra MySQL Komutları sayfamız da tamamlandı. Veritabanları ile ilgili yardım için bu siteyi kullanabilirsiniz.


Fazladan Taksimli Adresler

Diğerleri Yorum yapılmamış »

Bugün Google’ın sitelerimden birini adres.com/dosya// şeklinde dizinine eklediğini gördüm. Normal şartlar altında böyle olmaması gerek. Ya birileri bu şekilde bağlantı verdi ve google da bu bağlantıyı kontrol etti. Ya da bir iç kod hatası sonucu bu sayfaya ulaşabildi. Ama sorun şu ki bu adreslerin düzeltilmesi ve tek bölü işareti ile yayınlanması gerekliydi.

İnternette biraz araştırdım ve benzer sorunu yaşayabilecek arkadaşlar için HTACCESS dosyasında yapacakları küçük bir düzenlemeyle buna engel olabileceklerini öğrendim.

1
2
3
RewriteEngine On
RewriteCond %{REQUEST_URI} ^(.*)//$
RewriteRule . http://www.adres.com%1/ [R=301]

Böylelikle ola ki arama motoru arkadaşçıl (SEF) adreslerle çalışan bir siteniz varsa yanlış bir indexlenmenin önüne geçmiş olacaksınız…

C# ile Hazırlanan Programı Kapatmak

C Sharp Yorum yapılmamış »

C-Sharp kullanılarak hazırladığınız programı yeri geldiğinde kapatmak konusunda sıkıntı yaşayabilirsiniz. İşlemdeki bir form yüklenirken bazı kodların çalışmadığını göreceksiniz. Bu nedenle programınızı kapatmak için yerine göre aşağıdaki kodlardan birini kullamalısınız.

form.Close();
Formu kapatır. Form yüklenirken bu kod çalışmaz. Eğer program tek formdan oluşuyorsa bu aynı zamanda programı kapatmak anlamına gelecektir.

Application.Exit();
Eğer GUI kullandıysanız bu işinize yarayacaktır.

Environment.Exit(kod);
Diğer bir programı kapatma kodudur. Parantez içindeki yer bir integer değeri olup buradaki değer programın kapatılış kodudur. Bu konuda bir bilginiz yoksa 0 yazın.

Process.GetCurrentProcess().Kill();
Bu da diğer bir etkili yol. Nasıl Process.Start(“yol”) kullanılarak bir program çalıştırılıyorsa, C# kullanarak bir programı bu yolla kapatabilirsiniz. GetCurrentProcess() bir fonksiyon olup kullanılan programa işaret eder.

Fonksiyon Hazırlamak

PHP 1 yorum »

PHP içerisinde birçok fonksiyon barındırır. Bu fonksiyonların bir kısmı kendiliğinden gelir, bir kısmı ise php.ini dosyasından belirteceğiniz modüllerle kullanılabilir hale gelir. Örneğin strtolower() fonksiyonu her php dosyasının çalıştırabileceği bir fonksiyon iken imagecreatefromjpeg() fonksiyonu yalnız php_gd2.dll kütüphanesinin dahili ile çalıştırılabilir.

Ayrıca php kodlaması yapan kişi yani programcı da kendine özgü fonksiyonlar yazabilir. Bunun için php dosyamızın içerisinde fonksiyon kodlarına yer verebileceğimiz gibi include() ya da require() ile fonksiyonların bulunduğu bir dosyadan da veri çekebiliriz.

1
2
3
4
5
<?php
function YeniFonksiyon( $degisken ) {
   // işlemler buraya gelecek
}
?>

Burada fonksiyon adından sonra gelen parantezle belirttiğimiz değişkenler olmasa da olur. Fakat her durumda parantez açılır ve kapanır YeniFonksiyon() şeklinde. Eğer bir değişken için varsayılan bir değer belirtmek istersek bunu == operatörü ile yaparız:

1
2
3
4
5
<?php
function HaritadaGoster( $nereyi, $neresi == 'Merkez' ) {
   // işlemler buraya gelecek
}
?>

Yukarıdaki kodda görüldüğü üzere fonksiyonda ilk değişkeni kullanmak zorunludur, fakat ikinci değişken olan $neresi kullanılmasa da olur. Bu durumda ‘Merkez’ adını alacaktır. Bu değişkenler her durumda fonksiyon içinde kullanılacaktır. Değişkenlerin aralarına virgül (,) koymayı unutmamak gerek.

Fonksiyon içerisindeki her değişken, genel değişkenlerden bağımsız hareket etmektedir. Yani eğer fonksiyon dışındaki php belgemizde $degisken kullanıldıysa ve değer içeriyorsa, fonksiyon içinde bu değişken işlev görmez ve undefined (tanımsız) olarak görülür. Bunu engelleyip genel değişkeni fonksiyona dahil etmek için global komutunu kullanırız.

1
2
3
4
5
6
<?php
function Kucult() {
   global $genel;
   return strtolower( $genel );
}
?>

Her fonksiyon return (veri); şeklinde geri döner. Buradan dönen veri mantıksal (true, false), alfasayısal, sayısal ya da dize değer taşıyabilir.

Şimdi öğrendiklerimizi uygulayacağımız bir php fonksiyonu yazalım. Örneğin yazacağımız fonksiyon bir cümlede geçen her kelimenin baş harfini büyütsün ve bize versin.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$degisken = 'büyük tavşan küçük fareyi görünce çok sevindi.';
echo BasHarfBuyut( $degisken );
 
function BasHarfBuyut( $kelime )
{
   $kelimeler = explode( " ", $kelime );
   $yeni_kelime = '';
   for ( $i = 0; $i < count( $kelimeler ); $i++ ) {
      $kelimeler[$i] = strtoupper( $kelimeler[$i][0] ) . substr( $kelimeler[$i], 1, strlen( $kelimeler[$i] ) - 1 );
      $yeni_kelime .= $kelimeler[$i] . ' ';
   }
   return trim( $yeni_kelime );
}
?>

Bu örnekte fonksiyonun görevi öncelikle tüm boşluk ( ) işaretlerine bakarak yeni bir dize oluşturmak ve böylece kelimeleri ayırmak. Daha sonraki işlem kelimelerin ilk harfini ayrı ayrı büyütmek ve son olarak işlenmiş halini göndermek.

Bir sonraki konuda görüşmek dileklerimizle…

Javascript String İşlemleri

Javascript 1 yorum »

Uzun bir aradan sonra tekrar merhaba. Bugün sizlerle Java Script dilinde kullandığımız alfasayısal (string) değerler ile ilgili fonksiyonlar ve işlemler hakkında bilgi vereceğim. Öncelikle script dilinde nasıl bir string (harfler ve sayılar) değişken oluştururuz buna bakalım:

var a = 'Merhaba Dünya';
var b = 'İstanbul un en güzel mekanları burada.';

Burada “var degiskenadi = tırnak veya çift tırnak arasına değişken değeri” şeklinde bir ayarlama yaparak değişkenlerimizi belirledik. Eğer üst ayraç kullanacaksak kaçış işareti olan (\) unutulmamalıdır. Aksi takdirde java script hata verecektir.

var b = 'İstanbul'un en güzel mekanları burada.'; // yanlış
var c = 'İstanbul\'un en güzel mekanları burada.'; // doğru
var d = "İstanbul'un en güzel mekanları burada."; // ayıraç yerine çift tırnak, diğer bir yol

Bir string değişkenin karakter sayısını .length komutu vermektedir.

var a = 'Merhaba Dünya!';
var b = a.length; // değişken 14 sayısını içerir

Alfasayısal değişkenleri birleştirirken + (artı) işareti kullanılır.

var a = 'Murat';
var b = 'Eliçalışkan';
var c = a + ' ' + b; // değişken Murat Eliçalışkan olmuştur

Eğer bir string değer ile integer (sayısal) değer toplanırsa değer otomatik olarak alfasayısala dönüşecektir. Alfasayısallarda 4 işlem yapılamaz. Fakat string bir değer integere dönüştürülmek istenirse toString() fonksiyonundan yararlanabiliriz:

var a = 1 + 2;
var b = a.toString(); // b string bir değişken olup değeri '3' dür.

Bir alfasayısal değişken sadece sayısal değerler içeriyorsa sayısal değere dönüştürülebilir. Bunun için toplama haricindeki matematiksel bir işlem yapmak yeterlidir (Toplama yani + işareti javascriptin kuralı gereği değişkenin sonuna ekler ve alfasayısal değer verir). Örneğin:

var a = '100';
var b = a * 10; // değişken 1000 olur

Çeşitli Alfasayısal Fonksiyonlar

indexOf() Fonksiyonu

İlk olarak indexOf() fonksiyonundan bahsedelim. Bu fonksiyon bize alfasayısal bir değer içerisinde yer alan karakter ya da karakter grubunun konumu hakkında bilgi verir. Eğer sonuç -1 ise öyle bir karakter yoktur, 0 ve daha büyükse ise karakterin bulunduğu yeri bize bildirir.

var a = 'Merhaba Dünya!';
var b = a.indexOf('a'); // 4 verir

Sonuç 4 olarak çıkacaktır. Çünkü aranılan ilk değer 5. sıradadır, ilk değer 0 ile başlayacağı için bu bir eksiği olacaktır. Eğer a.indexOf(‘w’) deseydik, sonuç bulamayacağı için -1 olarak görünecekti.

charAt() Fonksiyonu

Verilen numarada geçen karakteri bize veren fonksiyondur.

var a = 'Merhaba Dünya!';
document.write(a.charAt(5)); // b harfini gösterir.

split() Fonksiyonu

Bu fonksiyon değişkendeki bir karaktere göre kelimeleri dize değeri haline getirmemize yarar. Örneğin bir cümledeki tüm kelimeleri tek tek ele almamız gerekirse:

var a = 'Bugün hava güzel!';
var dize = new Array();
dize = a.split(' '); // boşluk karakterini ayıraç olarak alır

Bu durumda dize[0] Bugün, dize[1] hava, dize[2] ise güzel! kelimelerini barındıracaktı.

substring() Fonksiyonu

Değişken içerisinde belirtilen karakterleri almamızı sağlar. Örneğin bir kelimenin içerisindeki 4. karakter ile 8. karakter arasındaki kelimeleri alacaksak. substring( baslangic, bitis ) şeklinde kullanılır:

var a = 'Venus Programlama';
document.write( a.substring(0, 5) ); // Venus verir

substr() Fonksiyonu

Diğerinden farklı olarak ikinci yazılan değer, ne kadar karakter ilerleneceğidir. Örneğin substr( 4, 8 ) dersek 4. karakterden 8 ileri gidip bu kısmı alacağı anlamına gelir.

toUpperCase() ve toLowerCase() Fonksiyonu

Bir alfasayısal değerdeki tüm harfleri küçültür ya da büyütür. Örneğin:

var a = 'Merhaba Dünya!';
var b = a.toUpperCase(); // MERHABA DÜNYA!
var c = a.toLowerCase(); // merhaba dünya!

Bir sonraki yazıda görüşmek dileklerimizle…


Wordpress'in katkılarıyla hazırlandı ve ndesign teması kullanıldı.
Venus © 2008
Konular RSS Yorumlar RSS Giriş