לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #8  
ישן 25-06-2010, 16:00
  sniper2 sniper2 אינו מחובר  
 
חבר מתאריך: 06.05.04
הודעות: 297
יש עוד אפשרות הרבה יותר מהירה מהשאר,
בתגובה להודעה מספר 1 שנכתבה על ידי emanuel שמתחילה ב "ביצועים לשני אפשרויות להוצאת מידע מSELECT מרובה תוצאות"

האשכול הזה עשה לי קצת חשק לחקור את הנושא, יש מספר אופציות,

האופציה הראשונה היא להשתמש בmysqli_query בצורה רגילה, ולקבל את כול הresult set אל תוך המשתנה, המגרעות של זה היא שכמות המידע שתשתמש זה כמות הזיכרון שינוצל, מה שאומר שאם אתה יושב על שרת שהmemory_limit שלו זה 64MB (שאני מודע לכך שזה יכול ליהיות המון תוכן) אתה פשוט תיהיה נורא מוגבל במידה מסויימת.

האופציה השניה היא להשתמש עם Reference בדיוק כמו שהחבר שלך אמר, ההבדלים הם לא משמעותיים בכלל, שניה לפה שניה לשם, והזמן איכשהו נורא דינאמי כשעובדים על מעט נתונים, אז זה באמת לא הכי שימושי.

האופציה השלישית היא להשתמש בUnbufferd Queries, המטרה היא לשלוח שאילתא לMySQL ולא לקבל את הresult set עד שלא נבקש אותו, הייתרונות של זה זה חסכון בשימוש של RAM, אתה להשתמש בשאילתות ולעבוד עם התוצאות שלהן רק מתי שאתה צריך, הרבה יותר מהר מהאופציות שהזכרתי למעלה, החסרונות שלו הם די בעייתיים למי שמריץ אפליקציה שהנגישות לטבלה צריכה ליהיות ממספר Processes שונים, כי ברגע ששלחתם UnBufferd Query לטבלה הטבלה ננעלת אוטומאטית למצב של Read Only ולא תוכלו לבצע בה שינויים(הגיוני לגמרי, אנחנו הרי שולפים Result Set שמעודכן לשניה מסויימם) אולי אפשר להגדיר בMySQL לבטל את הנעילה הזאת אם לא אכפת לנו כמה הנתונים מעודכנים, בכו"א זה החסרון היחידי שיש, אתם צריכים לחשוב על זה טיפה יותר במה אתם צריכים להשתמש, במידה ולא בא לכם להסתבר עם הנושא מומלץ להשתמש בmysqli_query.

עכשיו קצת Benchים

קוד PHP:
<?php
function microtime_float()
{
    list(
$usec$sec) = explode(" "microtime());
    return ((float)
$usec + (float)$sec);
}

$connection mysqli_connect('localhost','root','','rest_compare  ');

$start microtime_float();

$query mysqli_query($connection"SELECT * FROM `cities`");
$i 0;

while (
$row mysqli_fetch_array($queryMYSQLI_ASSOC))
{
    ++
$i;
}

$end microtime_float() - $start;
printf('%d Rows With No Reference In %f Time<br />'$i$end);

mysqli_free_result($query);

$start microtime_float();

$query =& mysqli_query($connection"SELECT * FROM `cities`");
$i 0;

while (
$row mysqli_fetch_array($queryMYSQLI_ASSOC))
{
    ++
$i;
}

$end microtime_float() - $start;
printf('%d Rows With Reference In %f Time<br />'$i$end);

mysqli_free_result($query);

$start microtime_float();

$query mysqli_real_query($connection"SELECT * FROM `cities`");
$i 0;

if (
$result mysqli_use_result($connection)){
    while (
$row mysqli_fetch_array($resultMYSQLI_ASSOC))
    {
        ++
$i;
    }
}
$end microtime_float() - $start;
printf('%d Rows With Unbufferd Query In %f Time'$i$end);

mysqli_free_result($result);
?>


התוצאה שאני קיבלתי על 37K תוצאות היא:

קוד:
37000 Rows With No Reference In 0.361479 Time 37000 Rows With Reference In 0.359125 Time 37000 Rows With Unbufferd Query In 0.239853 Time
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 15:20

הדף נוצר ב 0.05 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר