PDO / PHP / MySQL Performans: direkt yürütme karşı işlem

3 Cevap php

Ben (örneğin 1-100) değerleri bir dizi döngü ve döngü içerisinde hazırlanmış deyimi yürütme duyuyorum.

Döngü sona erdikten sonra işlemekle - - bir işlem kullanarak var ve avantaj mı döngü içinde doğrudan yürütme karşılaştırıldığında?

Değerleri çok işlem bakış bu noktadan gerekli değildir birbirine bağlı değildir.

3 Cevap

Lütfen sorguları ınsert'ler iseniz, 7.2.19. Speed of INSERT Statements MySQL kılavuzun sayfa senin bir transactionnal motoru kullanarak ya da olmayan bağlı olarak, iki ilginç bilgiler veriyor:

Olmayan bir transactionnal motorunu kullanırken:

To speed up INSERT operations that are performed with multiple statements for nontransactional tables, lock your tables.

This benefits performance because the index buffer is flushed to disk only once, after all INSERT statements have completed. Normally, there would be as many index buffer flushes as there are INSERT statements. Explicit locking statements are not needed if you can insert all rows with a single INSERT.

Ve, bir transactionnal motor ile:

To obtain faster insertions for transactional tables, you should use START TRANSACTION and COMMIT instead of LOCK TABLES.

Yani işlemler iyi bir fikir olabilir kullanarak tahmin ediyorum - ama o sunucu üzerindeki yüke bağlıdır varsayalım, ve aynı anda aynı tabloyu kullanarak birden fazla kullanım olup olmadığını, ve tüm bu ...

, Bu yüzden okumak için çekinmeyin ben bağlantılı sayfada daha fazla bilgiler vardır ;-)


And, if you are doing update statements :

Another way to get fast updates is to delay updates and then do many updates in a row later. Performing multiple updates together is much quicker than doing one at a time if you lock the table.

Yani, aynı tahmin ediyorum uçlar için daha söylenebilir.


BTW : to be sure, you can try both solutions, benchmarking them with microtime, on the PHP side, for instance ;-)

Hızlı bir zaman için bir çekimde ya da gruptaki tüm ekler yapabileceği onları bir arada, bir anda belki 5 veya 10, bir insert tüm toplu başarısız gibi olacak.

http://www.desilva.biz/mysql/insert.html

Bir işlem yavaşlar, böylece ihtiyacınız yoksa o zaman kullanmayın.

Bir hazır deyim iyi bir seçim olurdu ama sen sorguyu kadar bina her zaman tutmak zorunda değilsiniz gibi toplu ekler, yaptım bile.

Ben bir CSV dosyası (muhtemelen oldukça uzun) veri alma (Ben bunun için LOAD DATA INFILE sözdizimini kullanabilirsiniz biliyorum ama sokma önce benim alanlarında bazı işlemleri uygulamak zorunda) uygulamak zorunda olduğunda aynı soruyu karşı karşıya .

So I made an experiment with transactions and a file with about 15k rows. The result is that if I insert all records inside one unique transaction, it takes only a few seconds and it's cpu bound. If I don't use any transaction at all, it takes several minutes and it's IO bounded. By committing every N rows, I got intermediate results.