Ne mysql% 100 optimum yapmak için ne yapmalıyım?

7 Cevap php

Geçenlerde php + mysql ile oldukça büyük bir proje yapıyorum. Ve şimdi benim mysql hakkında endişeliyim. Ne mümkün olduğunca en iyi benim mysql yapmak için ne yapmalıyım? Bildiğin her şeyi anlat, ben gerçekten çok minnettar olacağım.

İkinci soru, ben mysql bilgi alır sayfa yük başına bir mysql sorgusu kullanabilirsiniz. Ben bir birleşim ile birkaç tablodan bilgi almak, çünkü oldukça büyük bir sorgu. Belki başka bir şey yapmalıyım?

Teşekkür ederim.

7 Cevap

MySQL Performance tips forge bazı üst ipuçları

Specific Query Performance:

  1. Use EXPLAIN to profile the query execution plan
  2. Use Slow Query Log (always have it on!)
  3. Don't use DISTINCT when you have or could use GROUP BY Insert performance
  4. Toplu INSERT ve DEĞİŞTİR
  5. LOAD DATA yerine INSERT kullanın
  6. LIMIT m,n may not be as fast as it sounds
  7. Don't use ORDER BY RAND() if you have > ~2K records
  8. Use SQL_NO_CACHE when you are SELECTing frequently updated data or large sets of data
  9. Avoid wildcards at the start of LIKE queries
  10. Avoid correlated subqueries and in select and where clause (try to avoid in)

Scaling Performance Tips:

  1. Kıyaslama kullanın
  2. izole iş yükleri idari işler müşteri performansı engel izin vermeyin. (Yani yedekleme)
  3. Hata ayıklama kayalar test, berbat!
  4. Veri büyüdükçe, indeksleme (Önem ve seçicilik değişim) değişebilir. Yapılanma değiştirmek isteyebilirsiniz. Lütfen kodu olarak modüler olarak şema olun. Ölçek kod mümkün yapmak. Plan ve değişimi kucaklamak, ve geliştiriciler aynı yapmak olsun.

Network Performance Tips:

  1. Minimize traffic by fetching only what you need. 1. Paging/chunked data retrieval to limit 2. Don't use SELECT * 3. Be wary of lots of small quick queries if a longer query can be more efficient
  2. Eğer uygunsa yuvarlak gezileri azaltmak için multi_query kullanın
  3. Bant genişliği israfını önlemek için saklı yordamları kullanın

OS Performance Tips:

  1. Use proper data partitions 1. For Cluster. Start thinking about Cluster before you need them
  2. Mümkün olduğunca temiz veritabanı ana tutun. Eğer gerçekten bu sunucu üzerinde bir pencere sistemine ihtiyacım var?
  3. OS güçlü yararlanın
  4. cron komut kısmak
  5. bir test ortamı oluşturmak

Açıklamak aracını kullanmayı öğrenin.

Üç şey:

  1. Katıldı mutlaka bırakıyorsa değildir. Çoğu kez kullanan birleşimler schemata aynı elde olanlar daha hızlı olabilir ama tablo katıldı önlemek olacaktır. Önemli şey katılır uygun olduğunu bilmektir. EXPLAIN çok yararlı ama aynı zamanda endeksleri nasıl çalıştığını bilmek gerekir.

  2. Her sayfa hit DB veri kapma eğer bir cacheing sistem sizin için çalışacak olsaydı, düşünün. Eğer öyleyse, PHP memcache ve memcached check out. PHP ile kullanımı kolay ve çok hızlı. Bu nedenle popüler.

  3. Geri mysql: anahtar tampon doğru boyutta olduğunu emin olun. Ayrıca önbellek kalmalıdır kritik indeksleri için özel anahtar tamponların kullanımı hakkında düşünebilirsiniz. Oku yaklaşık CACHE INDEX and LOAD INDEX INTO CACHE . See also here.

"... Ben bir birleşim ile birkaç tablodan bilgi almak için"

Katıldı, hatta "büyük" katılır kötü değil. Sadece iyi dizinleri sahip olduğunuzdan emin olun.

Ayrıca kayıtların bir çift ile bu performansı dikkat kayıtları yüzbinlerce performansı çok daha farklı, yani testi buna göre.

Performansı için, bu kitap iyi: High Perofmanace MYSQL. associated blog çok iyidir.

2cents: 2sec

(Mysqlsla da log-sorguları-kullanmayan endeksler seçeneğinden yararlanabilir)

  • mysqlhack.com üzerine (bir süre çalışıyor sonra) nasıl kurulum ... runnig olduğu üzerinde tahminler verir ve ayrıca nerede daha doğrusu ayar kurulum için gibi işaretçiler verir 'mysqlreport' adlı bir senaryo var ...

Mükemmel olmak bir zorluk biraz değil, kendinizi ayarlamak için ilk hedeftir.

Tüm sorguları mysql günlüğünü etkinleştirin ve günlük dosyaları ayrıştırır ve SQL ifadelerinde herhangi değişmez değerleri kaldırır bazı kod yazmak.

örneğin değişiklikler

SELECT * FROM atable WHERE something=5 AND other='splodgy';

ve

SELECT * FROM atable WHERE something=1 AND other='zippy';

bir şey gibi:

SELECT * FROM atable WHERE something=:1 AND other=:2;

(Sorry, I've not got my code which does this to hve - but it's not rocket science)

Then shove the re-written log into a table so you can prioritize your performance fixes based on length ve frequency of execution.