PDA

View Full Version : مقاسیه تابع های mysql و php از نظر performance



engmmrj
یک شنبه 03 خرداد 1394, 14:41 عصر
ما در query ها از توایع mysql و php می توانیم استفاده کنیم که استفاده از توابع phpو mysql هر دو خروجی یکسانی دارند ولی در بحث performance و query های بهینه فرق هایی بین استفاده کردن از توابع می باشد که در پروژه های پر بازدید این امر بصورت فاحش خودش را نشان می دهد .
در ادامه مقایسه ایی از نظر performance بین توابع mysql و php صورت گرفته است که مشخص می کند که استفاده از توابع کدام یک performance بهتری دارند.

1- بدست آوردن میانگین
A - با استفاده از تابع های php

$sql = "SELECT score FROM school";

$result = mysqli_query($conn, $sql);

$total = 0;

$num = mysqli_num_rows($result);

while($row = mysqli_fetch_assoc($result)) {
$total += $row['score'];
}

echo ($total / $num);

B- با استفاده از تابع های Mysql


$sql = "SELECT AVG(score) as average_score FROM school";

$result = mysqli_query($conn, $sql);

$row = mysqli_fetch_assoc($result);

echo $row['average_score'];

نتیجه : برای ۱۰۰۰۰ رکورد php در 5.65 ثانیه و در mysql در 2.14 ثانیه به طول انجامید ُ همانطور که مشاهده میکنید mysql در این مثال از سرعت بیشتری برخوردار بود.
و اما اگر query cache سرور mysql روشن باشد مثال فوق در 0.91 ثانیه به طول می انجامد.

۲- فرمت نمایش فیلد های زمان
A - یپاده سازی مثال فوق با استفاده از توابع php


$result = mysqli_query($conn, "SELECT rating_date FROM ratings");

while($row = mysqli_fetch_assoc($result)) {
$timestamp = strtotime($row['rating_date']);

$theDate = date('d/m/Y', $ timestamp);

echo $theDate . ' ';
}

B- پیاده سازی مثال فوق با استفاده از توابع mysql


$sql = "SELECT DATE_FORMAT(rating_date, '%D/%M/%Y') AS rating_date FROM ratings";

$result = mysqli_query($conn, $sql);

while($row = mysqli_fetch_assoc($result)) {
echo $row['rating_date'] . ' ';
}


نتیجه : برای ۱۰۰۰۰ رکورد php با زمان 39.48 ثانیه و mysql در 8.30 ثانیه به طول انجامید ُ همانطور که مشاهده می فرمایید حدودا ۴.۵ برابر سرعت mysql از php در مثال بالاتر بود اما اگر cache mysql روشن باشد این رقم به 5.74 ثانیه میرسد.

نتیجه گیری : همان طور که مثال های بالا مشاهده کردید ُ استفاده از تایع های mysql از نظر performance خیلی بهتر از تابع های php عمل میکنند.
و من به شما توسعه میکنیم تاجایی که خود mysql نیاز ما را برطرف میکنید از php در query ها استفاده نکنید.

منبع : http://engmmrj.ir/site/22

abolfazl-z
دوشنبه 04 خرداد 1394, 00:12 صبح
شما چطوری محاسبه کردید ؟

m_r_1989
دوشنبه 04 خرداد 1394, 01:33 صبح
شما اگه از foreach استفاده کنی می بینی زمان خیلی پایین تر می آید برای performance از foreach استفاده می شه

engmmrj
دوشنبه 04 خرداد 1394, 13:00 عصر
شما چطوری محاسبه کردید ؟
مشکلی هست در محاسبه ها ؟

abolfazl-z
دوشنبه 04 خرداد 1394, 16:58 عصر
مشکلی هست در محاسبه ها ؟

شما باید اثبات کنید روش تان را یا نه ؟

مثل این میماند که من بگم 2*2 می شود 5 بعد اثبات اش نکنم.

Unique
دوشنبه 04 خرداد 1394, 19:18 عصر
واقعا دنبال دلیل هستین ؟!‌ یعنی موضوع به این واضحی اصلا نیاز به دلیل داره !؟ حرفشون مثل اینه که بگی ۲×۲ میشه ۴ ! (خوب معلومه اثبات نمیخواد). توابع SQL سرعت بهتری دارن وقتی تعداد رکورد ها زیاد میشن.

با این کد میتونید خودتون چک کنید :

$conn = mysqli_connect(...);
$start = microtime(true);

for($i = 0; $i < 10000; $i++)
{
// do the calc
}
$end = microtime(true);
$time = $end - $start;
echo $time;