Veritabanı sorgusu daha fazla nasıl hızlandırılır?

Sorguyu hızlandırmak için önerisi olanlar bildiklerini paylaşabilir mi ?

SELECT
alim_bilgileri.*,
alim_bilgileri. İd as aid,
expertiz.*,
expertiz. İd as eid,
stok.*,
(SELECT COUNT(loger. İd) FROM loger WHERE arac_id = stok. İd and IFNULL(goruldu, 0) = 0 ) ykga_adet,
(SELECT SUM(masraf. Tutar) FROM masraf WHERE arac_id = stok. İd and tip='GELİR') gelir_tutar,
(SELECT SUM(masraf. Kdv) FROM masraf WHERE arac_id = stok. İd and tip='GELİR') gelir_kdv,
(SELECT SUM(masraf. Toplam) FROM masraf WHERE arac_id = stok. İd and tip='GELİR') gelir_toplam,
(SELECT SUM(masraf. Tutar) FROM masraf WHERE arac_id = stok. İd and tip='GİDER') gider_tutar,
(SELECT SUM(masraf. Kdv) FROM masraf WHERE arac_id = stok. İd and tip='GİDER') gider_kdv,
(SELECT SUM(masraf. Toplam) FROM masraf WHERE arac_id = stok. İd and tip='GİDER') gider_toplam,
(SELECT SUM(masraf. Toplam) FROM masraf WHERE arac_id = stok. İd and tip='GİDER' and gider_tipi = ('FİNANSMAN')) finansal,
(SELECT COUNT(masraf. İd) FROM masraf WHERE arac_id = stok. İd and IFNULL(pk, 0) = 0 and tip IN ('GİDER','GELİR') and sanal != 1) kontrol_onay,
(SELECT COUNT(masraf. İd) FROM masraf WHERE arac_id = stok. İd and IFNULL(pk, 0) = 0 and tip IN ('GİDER','GELİR') and sanal = 1) sanal_kontrol_onay,
(SELECT SUM(masraf. Toplam) FROM masraf WHERE arac_id = stok. İd and tip='GİDER' and gider_tipi IN ('TRAFİK SİGORTASI','Trafik Zeyil')) trafik,
(SELECT SUM(masraf. Toplam) FROM masraf WHERE arac_id = stok. İd and tip='GİDER' and gider_tipi LIKE ('MTV%')) mtv,
(SELECT SUM(masraf. Toplam) FROM masraf WHERE arac_id = stok. İd and tip='GİDER' and sanal = 1 and gider_tipi!='BANKA KATKISI') sanal,
(SELECT SUM(masraf. Toplam) FROM masraf WHERE arac_id = stok. İd and tip='GİDER' and sanal = 1 and gider_tipi='BANKA KATKISI') banka,
(SELECT SUM(masraf. Toplam) FROM masraf WHERE arac_id = stok. İd and tip='GİDER' and gider_tipi='İLAVE AKSESUAR') ilave_aksesuar,
(SELECT SUM(masraf. Toplam) FROM masraf WHERE arac_id = stok. İd and tip='GİDER' and masraf_grup='30 ATÖLYE MSRF') atolye_masraf,
(SELECT SUM(masraf. Toplam) FROM masraf WHERE arac_id = stok. İd and tip='GELİR' and masraf_grup='30 ATÖLYE MSRF') atolye_masraf_gelir,

(SELECT COUNT(id) FROM masraf WHERE arac_id = stok. İd and tip='GİDER' and gider_tipi LIKE ('MTV%')) mtv_adet,
(SELECT gider_tarihi FROM masraf WHERE arac_id = stok. İd and tip='GİDER' and gider_tipi LIKE ('MTV%') order by str_to_date(gider_tarihi,'%d-%m-%Y') desc limit 0,1) mtv_tarih,
(SELECT satis_fiyat FROM satis_fiyat WHERE arac_id = stok. İd ORDER BY id desc LIMIT 0,1 ) as satis_fiyati,
(SELECT satis_toplam FROM satis_fiyat WHERE arac_id = stok. İd ORDER BY id desc LIMIT 0,1 ) as satis_toplam_kdvli,
(SELECT satis_kdv FROM satis_fiyat WHERE arac_id = stok. İd ORDER BY id desc LIMIT 0,1 ) as satis_kdvsi,
(SELECT liste_toplam FROM satis_fiyat WHERE arac_id = stok. İd ORDER BY id desc LIMIT 0,1 ) as liste_toplam,
(SELECT mtv_tutar FROM satis_fiyat WHERE arac_id = stok. İd ORDER BY id desc LIMIT 0,1 ) as mtv_tutar,
(SELECT tescil_tutar FROM satis_fiyat WHERE arac_id = stok. İd ORDER BY id desc LIMIT 0,1 ) as tescil_tutar,
(SELECT otv_tutar FROM satis_fiyat WHERE arac_id = stok. İd ORDER BY id desc LIMIT 0,1 ) as otv_tutar,

(SELECT COUNT(id) FROM atolye WHERE arac_id = stok. İd) isemri,
(SELECT SUM(ongorulen) FROM atolye WHERE arac_id = stok. İd) as ongorulen,
(SELECT SUM(ongorulen) FROM atolye WHERE arac_id = stok. İd and yonetici_onay = 1) as onaylanan,
(SELECT SUM(gerceklesen) FROM atolye WHERE arac_id = stok. İd) as gerceklesen
FROM stok
LEFT JOIN alim_bilgileri ON alim_bilgileri. Arac_id = stok. İd
LEFT JOIN expertiz ON expertiz. Arac_id = stok. İd
WHERE durum IN ('STOKTA','ONAY_BEKLEYEN','TEKLIF_ONAY') and alim_tipi != 'KONSINYE'

S
0 kişi takip ediyor.
Misafir olarak yayınla
19
19 CEVAP

arkadaşlar tekrar ben, memcache olayı pek içime sinmemişti güncel datayı görmek istediğimizde yine aynı sorgu süresini görecekti, yaptığım bir hatayı sizinle paylaşmak istiyorum ki sizde yapmayın. Ben primary keylerin normalde indexlendiğini sanıyordum ta ki bu güne kadar. Lakin işin aslı öyle değilmiş tüm tablolarda primary keyleri ve secondary keyleri index olarak atadım inanılmaz bir hız kattı 1 sn nin altına düştü 120 snlik sorgu.

S

Yanlış söylemeyeyim ama sadece primary değil uniq de yapınca index oluyordu

Başbuğ Akinönder 6 yıl

Başbuğ Akinönder uniqde yaptım valla kardeşim ama öyle değilmiş işin aslı navicate kullanıyorum primary key ve uniq yapmıştım öncesinde bilginiz olsun bu tarz bir problemle karşılaşırsanız. Hoş böyle problemler bir nevi iyi oluyor bütün cache sistemlerini denemiş oldum mysqlde php de girmedigim configrasyon kalmadı.

Serkan Gumus 6 yıl

Arkadaşlar lütfen yanlış bilgi vermeyin, primary key otomatik olarak indeksleniyor: https://dev.mysql.com/doc/refman/5.7/en/optimizing-primary-keys.html?fref=gc "The primary key for a table represents the column or set of columns that you use in your most vital queries. It has an associated index, for fast query performance." #

Hüseyin Yürükoğlu 6 yıl

Hüseyin Yürükoğlu 1 sn nin altına düştü sorgu 120 snde gelen sorgu yanlış bilgi vermiyorum mantıksal açıklamasını yaparbilirmisiniz merak ediyorum.

Serkan Gumus 6 yıl

Sorgu süresi düşebilir ona bir şey demiyorum. Benim dediğim şudur: Primary keyler otomatik olarak indexlenir. Tabloyu yaratırken belki de yaptığınızı sandığınız primary key yapılmamıştır. Elimizde gerekli veriler olmadan nasıl mantıksal açıklama yapalım ki?

Hüseyin Yürükoğlu 6 yıl

Hüseyin Yürükoğlu unsigned yerinde auto incretment işaretli primary keyde işaretli sizce index varmıdır yokmudur.

com-64kr3a01sr2onwwzbdno.jpg

Serkan Gumus 6 yıl

Aşağıdaki linke göre primary key index özelliğine sahip ama ayrıca index adında bir "index" te var, her rdbms te aynı özellik çok ince farkla hariç aynı şekilde çalışmak zorunda aynı performansta değil, stackoverflowdaki yorumlarda hep bu şekilde https://dev.mysql.com/doc/refman/5.7/en/mysql-indexes.html?fref=gc

Başbuğ Akinönder 6 yıl

Anlamıyorum ki neyi iddia ediyorsunuz? Primary key sütunu otomatik olarak indekslenmez mi diyorsunuz?

Hüseyin Yürükoğlu 6 yıl

Mysql de bir sürü index çeşidi var, veri tipi ve database yapısına göre hepsinden aynı performansı alamayabilirsin.

Başbuğ Akinönder 6 yıl

Başbuğ Akinönder Yok ben size cevap vermemiştim. İsim eklemeyince karıştı pardon. Anlatmak istediğim şu, her primary key index oluyor ama her index primary key olmak zorunda değil.

Hüseyin Yürükoğlu 6 yıl