MySQL tablo tasarımı ile hızlandırma

Bu yazımda php ile kurduğumuz tabloların hızlandırılması adına kendi kullandığım yöntemi aktaracağım.

Aslında çok detaylı olmayan bu yöntemle mysql sorgu adedinde azalmaya giderek sayfalarımızın ziyaretçilere daha hızlı açılmasını sağlayabiliriz.

Hepimiz veritabanında tabloların ilişkilendirilmesini öğrenerek, yapmış olduğumuz sistemimizde tabloları birbirine bağladık.

ID dediğimiz bu ilişkilendirilmesi alanlar sayesinde verilen sipariş’in hangi üyeye ait olduğunu bulduk.

Yapacağımız bu uygulamayı örnekleyerek anlatmaya çalışacağım.

Üyelerin bulunduğu kullanicilar, ürünlerin bulunduğu urunler ve siparişlerin verildiği siparisler tablomuz olsun.

  • Kullanıcılar tablosunda üyelerine ait ad, soyad, eposta vb.
  • Ürünler tablomuzda ürün adı, ürün açıklaması, fiyatı vb.
  • Siparişler tablomuzda ise sipariş verilen ürün IDsi, siparişi veren üyenin ID toplam fiyat vb. bilgiler bulunur.

Siparişler kısmında örnek olarak genelde aşağıdaki yapı kullanılır.

SELECT * FROM siparisler s
INNER JOIN kullanicilar k ON s.kullaniciID = s.kullaniciID
INNER JOIN urunler u ON s.urunID = u.urunID
WHERE 1
LIMIT 0,20

Bu şekilde bir sorgu hatasız ve ilk başlarda gayet güzel çalışan bir sistem olmasına rağmen ileride eklenecek olan her türlü eklenti sayesinde zamanla hantallaşmaya, yavaşlığa yol açar.

Burada baktığımızda siparişi veren ürün adı, bilgisi, fiyatı o siparişe özgü olduğundan büyük ihtimal çok fazla değişikliğe uğramayacaktır. Aynı şekilde siparişi veren kullanıcının adı ve soyadı da.

Ne yapmamız gerektiği noktasında benim kullandığım yöntem şu şekilde:

Bir işlemde göstermeye çalıştığım ana tabloda, ilişkilendirilmiş IDlerin istenilen kısımlarının verileri de ana tabloya yazmak.

Demek istediğim siparisler tablosuna üyenin adını ve soyadını, sipariş verdiği ürünün adını, resmini gibi benden siparis listeme kısmında istenilen verileri de ilgili tablolardan alıp, ana tablom olan siparis tablosuna yazdırmak.

Bu şekilde normalde her sipariş listelendiğinde eklenecek olan iki adet tablomu sorguya eklemeyerek, sadece siparişin işlem gördüğü kısımda ilgili kısımları alarak yukarıda yazdığım sorgunun son hali aşağıdaki gibi oldu.

SELECT * FROM siparisler WHERE 1 LIMIT 0,20

Sunucuzu fazla yormadan, mili saniyelerde açılan sayfalar, yapılar hazırlamanız dileğiyle.

Paylaş: