MySql de Sorguların hızlı çalışması için ne yapılabilir?

elessar (65) 11 yıl önce sordu

Merhabalar, mysql için heidi sql kullanıyorum. Bir milyondan fazla verisi olan bir tablom var. Select ve insert sorgularını daha verimli ve yüksek performansta çalıştırabilmek için acaba ne yapabilirim ?

Toplam 2 cevap


cemphp (651) 11 yıl önce cevapladı

Yukarıdaki bilgilere ek olarak ben de birşeyler yazabilirim.

MySql sorgularında performans için şunlara dikkat edin:

  1. Mümkünse Count(*) metodunu tüm tablo için çalıştırmayın, tüm tabloyu kilitleyebilir.
  2. DISTINCT yerine GROUP BY ifadeleri kullanın. Performansı daha iyidir.
  3. WHERE, GROUP BY, and ORDER BY ifadelerinde indekslenmiş kolon kullanın.
  4. Indeksleri basit tutun, bir kolonu birden fazla indekste kullanmayın.
  5. Bazen MySQL yanlış Index seçer bu sebepten USE INDEX kullanın.
  6. 5'den az Indeksli alanda OR yerine, UNION ifadelerinde LIMIT kullanın.
  7. MAX yerine Indeksli alan ve Order BY ifadeleri kullanın.
  8. ORDER BY RAND() ifadesi kullanmaktan kaçının.
  9. Bazı durumlarda LIMIT M,N sorguları yavaşlatır. Mümkün oldukça az kullanın.
  10. Where kullandığınız ifadelerde Alt Sorgular yerine UNION kullanın.
  11. Bir tablodaki tüm verileri DELETE FROM ile silmek yerine DROP Table ve Create Table kullanın. Tüm verileri silmektense Tabloyu silip yeniden oluşturmak daha hızlıdır.
  12. Select ifadelerinde SELECT *  yerine SELECT KolonAdı şeklinde sadece ihtiyacınız olan alanları seçin.

 

ergin (2539) 11 yıl önce cevapladı

MySql de sorguların daha hızlı, verimli ve yüksek performansta çalıştırabilmek için birkaç noktaya dikkat etmeniz gerekmektedir. Bu işlemler tasarım aşamasından başlayıp bir sürü işlemleri kapsamaktadır. Sizin bu aşamada sorgularınızın verimli ve performanslı çalışması için kullanabileceğiniz yöntem ise Indexlemedir.

Indexleme nedir?

Index, tablolarda bulunan sütunlarının bazılarının özel şekilde düzenlenmiş halidir. Bu alanların özel düzenlenmesi sayesinde sorgular daha hızlı ve performanslı çalışır ve geriye daha çabuk sonuçlar dönmesini sağlamaktadır.

Hangi Sütunlara Index konulmalıdır?

  • Primary key ve Foreign key sütunları.
  • Sorgularda çok sık kullanılan sütunlar.
  • Çok sık sıralamaya tabi tutulan sütunlar.
  • Gruplama yapılan sütunlar (group by).

Index gerektirmeyen Sütunlar:

  • Nadiren sorgulanan sütunlar.
  • Az seçeneği olan sütunlar(cinsiyet,ülke gibi).
  • Text,ntext ve image sütunları.

Index yapılırken dikkat edilecek noktalar:

  • Primary key veya Unique constraint oluşturulduğu zaman index otomatik olarak oluşturulur. Standart index oluşturmak yerine Primary key veya Unique constraint tercih edilmelidir.
  • View’larda da index olabilir.
  • Bir sütun  üzerinde index oluşturmadan önceden bir index’e sahip olup olmadığı bakılmalıdır.
  • Bir tabloda index oluştumak için tablonun sahibi olmak gerekir.
  • Indexleme, sabit diskte extra yer tutar. Verdiği performans artışının yanında karşılaştırılabilecek kadar bile değildir ancak veritabanınınzdaki her tablonun her sütununda index oluşturursanız, sabit diskinizin umduğunuzdan çok daha çabuk yer kaplayabilir.

Index Oluşturma

Bbir tablo ile ilişkili olarak index yaratmak için gerekli komut CREATE INDEX komutudur. Komutun yazılış biçimi aşağıdaki gibidir:

 CREATE INDEX index adı

 ON tabloadı (kolonadı 1,kolonadı 2,....,kolonadı n );

 

elessar 11 yıl önce

Öncelikle teşekkür ederim. Gerekli olan kolona index uyguladım. Benim select sorgum SELECT * FROM tbl_urunler where urun_id='" + urun_id[j] + "' şekildedir. Peki index lemeden sonra sorgumda bir değişiklik yapmalı mıyım? Bir de insert, update ve delete işlemleri için yapabileceğim başka bir işlem var mı?

ergin 11 yıl önce

Mümkün olduğu sürece Select ifadelerinde SELECT * yerine SELECT KolonAdı şeklinde sadece ihtiyacınız olan alanları seçerek yapmanız performansınızı etkileyecektir. Ayrıca diğer arkadaşın yazdığı cevaptaki seçenekleri uygulamanız faydalı olacaktır.