"Bolca sorgu gelen tablolarınızın where koşulunda kullandığınız alanlara index atın, ms içinde cevaplar alırsınız"
Örnek ile anlatayım.
products tablon var.
oracle syntax'ıdır.
create table products {
id number(19) not null unique,
name varchar2(255 char) not null,
description varhcar2(1024 char) not null,
category_id number(19) not null,
seller_id number(19) not null,
create_date timestamp not null,
update_date timestamp not null,
status varchar2(50 char) not null
}
tabloda 50m kayıt var.
Sistemin içerisinde kullanıcılar anasayfa, ürün arama sayfası, ürün detay sayfası, sepette, checkout'ta bir çok yerde bu tabloya sorgu atılıyor.
Önemli nokta : Sorgu atılırken hangi koşullar ile atılıyor?
case 1 : anasayfa için mesela son güncellenen aktif 10 kayıt gelsin.. Bunun için update_date ve status alanına index atmalısın.
Oracle Sorgusu / MySQL daha farklıdır :
SELECT *
FROM (select * from products where status = 'ACTIVE' ORDER BY update_desc DESC) last_products
WHERE rownum <= 10
ORDER BY rownum DESC;
case 2 : ürün arama sayfasında, ad'a göre arama yapıldığında aktif olan kayıtların güncelleme tarihine göre listelenmesi
Burada name, status ve update_date alanında index olmalı gibi
select * from products where status = 'ACTIVE' and name like '%eti sütlü kraker%' order by update_date desc
Not : yazdıklarımda syntax vs hatası olabilir.
Index atmanın faydası select işlemlerindedir, dezavantajı ise insert/update işlemlerindedir. Ama buradaki örnekteki kayıt sayısı içinn düşünülecek bir durum dahi değildir.