SQL - אופטימיזציה - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

SQL - אופטימיזציה


orninyo

Recommended Posts

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

ובנוסף כמה שאלות:

(השאלות בהנחה שהDB כבר מנורמל רמה 4)

1. האם fetch_row יותר מהירה/פחות כבדה מfetch_array?

2. האם fetch_array יותר מהירה/פחות כבדה מfetch_assoc?

3. האם ההבדל משמעותי בין: ביקוש כל השדות (*) לביקוש שדה/שדות ספציפים בלבד?

4. באיזה גרשיים יותר מומלץ להשתמש? "/'

5. האם הוספת LIMIT לשאילתת SELECT מפחית מהמשקל שלה?

6. האם זה נכון של desc ו distinct מאריכים את זמן הריצה ונפח התעבורה של שאילתה?

7. מה היתרון של להתחבר ולהתנתק מהDB בכל עמוד מחדש?

תודה לכל התורמים.

קישור לתוכן
שתף באתרים אחרים

כשרוצים לשפר ביצועים כדאי להתחיל מהדברים הגדולים ברמת הארכיטקטורה של התוכנה, זה הרבה יותר משמעותי מ-micro optimization למיניהם כמו fetch_row לעומת fetch_array.

דברים להסתכל עליהם - תצמצם את כמות השאילתות בכל דף למינימום, תאחד שאילתות יחד אם צריך ואפילו תשנה את מבנה הטבלאות ב-database אם זה נדרש, תשים אינדקסים על העמודות המשמעותיות. למרות שנורמליזציה היא התחלה טובה היא לא דווקא מבטיחה את הביצועים הכי גבוהים, במציאות לפעמים צריך להתפשר על התאוריה.

3. האם ההבדל משמעותי בין: ביקוש כל השדות (*) לביקוש שדה/שדות ספציפים בלבד?

יש הבדל מסויים, בעיקר אם אתה קורא הרבה שורות וחלק גדול מהשדות מיותרים אז נפח התעבורה גדול בצורה מיותרת.

4. באיזה גרשיים יותר מומלץ להשתמש? "/'

אם אתה משתמש בגרשיים בשאילתות שלך אתה כבר לא בכיוון. תבנה שאילתות פרמטריות, זה טוב גם לאבטחה במניעת sql injections וגם לביצועים בכך שה-execution path של השאילתה נשמר ב-cache של ה-DB וכך אתה מרוויח ביצועים פעם הבאה שאתה שאילתה דומה.

5. האם הוספת LIMIT לשאילתת SELECT מפחית מהמשקל שלה?

כן במידה בעיקר אם אתה עובד מול טבלאות מאוד גדולות. בכל מקרה מומלץ שכל שאילתה תהיה מוגבלת בגודל שלה. אם צריך להציג הרבה תוצאות אז תשתמש ב-paging כבר ברמת ה-SQL

6. האם זה נכון של desc ו distinct מאריכים את זמן הריצה ונפח התעבורה של שאילתה?

desc לא אמור להשפיע. distinct אני מניח שכן אבל אם אתה צריך את הפונקציונליות אז מה הברירה שלך?

7. מה היתרון של להתחבר ולהתנתק מהDB בכל עמוד מחדש?

היתרון - קל לנהל את זה, החיסרון - זה לוקח זמן בכל דף.

מערכות רציניות (בדרך כלל java או c#) מנהלות connection pool, הן מחזיקות אוסף של חיבורים פתוחים (אך לא פעילים) וכשמשהו במערכת צריך לעבוד מול ה-DB הוא מקבל אחד החיבורים הקיימים ומחזיר אותו למאגר כשהוא מסיים. לא יודע אם קיים משהו דומה ב-php.

קישור לתוכן
שתף באתרים אחרים

תבנה שאילתות פרמטריות, זה טוב גם לאבטחה במניעת sql injections וגם לביצועים בכך שה-execution path של השאילתה נשמר ב-cache של ה-DB וכך אתה מרוויח ביצועים פעם הבאה שאתה שאילתה דומה.

אשמח לקבל הסבר איך עושים את זה (שצ"ד PHP)

ואיך ניתן לאחד שתי שאילתות סלקט שאינן קשורות אחת לשניה? (כל אחת מדברת עם טבלה אחרת ודורשת שדות אחרים)

תודה.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...