"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.