הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   יעילות מסד (https://hosts.co.il/forums/showthread.php?t=91182)

Erez | TrustMedia.co.il 01-08-11 11:39

יעילות מסד
 
יש לי מסד נתונים עם טבלה שמכילה חיפושים שבוצעו באתר. בטבלה יש כמה מאות אלפי רשומות, והמבנה שלה הוא:
ID מסוג INT שהוא האינדקס בטבלה
text מסוג text

מהטבלה אני מעוניין רק לשלוף נתונים ולא להכניס, וחשוב לי שזה יהיה כמה שיותר מהיר.
מה אני יכול לעשות כדי לשפר את הביצועים? זה דיי דחוף, החברת איחסון יושבת לי על הראש...
(לעבור שרת זה לא אופציה כרגע)

תודה חבר'ה

gillllll 01-08-11 11:43

תלוי לפי מה אתה שולף אם אתה למשל עושה שאילתות בסגנון
select * from X where text ='BLa'
אז הייתי מציע לך לשים אינדקס על השדה טקסט.
http://beginner-sql-tutorial.com/sql-index.htm

לגבי ה ID אם אתה כבר על שרת MYSQL או MSSQL וזה מפתח (כלומר הגדרת אותו כמפתח) אז זה אוטומטית כבר מוגדר אינדקס בגלל זה דיברתי רק על TEXT.
חוץ מזה אם יש לך שאילתות שאתה מחפש צירוף של ID וטקסט אני מציע לך לעשות גם על הצירוף אינדקס.

שים לב ששימוש ב INDEX יצרוך יותר זיכרון אבל השאילתות יבוצעו יותר מהר כלומר פחות עומס על המעבד.

Erez | TrustMedia.co.il 01-08-11 11:57

ציטוט:

נכתב במקור על ידי gillllll (פרסם 813108)
תלוי לפי מה אתה שולף אם אתה למשל עושה שאילתות בסגנון
select * from X where text ='BLa'
אז הייתי מציע לך לשים אינדקס על השדה טקסט.
http://beginner-sql-tutorial.com/sql-index.htm

לגבי ה ID אם אתה כבר על שרת MYSQL או MSSQL וזה מפתח (כלומר הגדרת אותו כמפתח) אז זה אוטומטית כבר מוגדר אינדקס בגלל זה דיברתי רק על TEXT.
חוץ מזה אם יש לך שאילתות שאתה מחפש צירוף של ID וטקסט אני מציע לך לעשות גם על הצירוף אינדקס.

שים לב ששימוש ב INDEX יצרוך יותר זיכרון אבל השאילתות יבוצעו יותר מהר כלומר פחות עומס על המעבד.

הphpmyadmin משום מה לא מאפשר לי לעשות את השדה text בתור אינדקס
והשאילתות הם כאלו:
select `text`,`times` from `search` order by `time` limit 0,100
select `text` from `he` order by `time` limit 0,100

רק עם לימיט שונה בהתאם לדף.
בכל מקרה ראיתי את זה:
http://www.internet-israel.com/inter...9%D7%9C-mysql/

יש שם את המנוע Berkeley DB – BDB שנראה לי מתאים, אבל אני לא בטוח. אז האם זה יתאים עבורי?

וזה מהדוח של השאילתות האיטיות:

# Mon Aug 1 01:25:23 2011
# Query_time: 3.734186 Lock_time: 0.000106 Rows_sent: 100 Rows_examined: 320465
use ******;
select `text`,`times` from `search` order by `time` limit 0,100

# Mon Aug 1 01:32:44 2011
# Query_time: 4.665496 Lock_time: 0.036117 Rows_sent: 100 Rows_examined: 322565
use *****;
select `text`,`times` from `search` order by `time` limit 2100,100

gillllll 01-08-11 12:16

אוקיי אני מניח (כיון שאני לא בטוח אם ORDER BY באמת ישופר עם אינדקס למרות שמבחינת הגיון של איך אינדקס עובד זה אמור לשפר) במקרה הזה אם תעשה אינדקס דוקא על TIME זה יהיה לך טוב אתה לא צריך אינדקס על TEXT כי אתה לא שולף לפיו.
על TIME הוא נותן לך לבצע אינדקס?

(אפילו אם זה אפשרי אולי הייתי הולך על הפיכת TIME למפתח אם הוא יחודי ואילו 2 השאילתות היחידות שאתה מריץ ועושות בעיה.)

לגבי מנועים אני לא יודע לא התנסתי בהבדלים השונים בניהם...

Erez | TrustMedia.co.il 01-08-11 12:42

צודק. שיניתי את השאילתא שתמיין לפי הid במקום הtime. נקווה שזה ישפר את הביצועים.
יש עוד עצות??

IgalSt 01-08-11 14:36

אכן אין טעם למיין לפי הזמן אם יש לך ID שמייצג בדיוק אותו הדבר (טיפ ראשון בייעול שאילתות).

מה המנוע של הטבלה שלך?
נסה להשתמש ב-MyISAM. הוא לא טוב במקרה של עדכונים כי הוא נועל את כל הטבלה במקרה כזה, אבל לשליפה הוא יותר מהיר מאשר InnoDB.

בכל אופן, יכול להיות שאפשר לעשות איזשהו קאשינג ולשים X רשומות אחרונות בטבלה קטנה ולשלוף ממנה?

Erez | TrustMedia.co.il 01-08-11 17:51

ציטוט:

נכתב במקור על ידי IgalSt (פרסם 813128)
אכן אין טעם למיין לפי הזמן אם יש לך ID שמייצג בדיוק אותו הדבר (טיפ ראשון בייעול שאילתות).

מה המנוע של הטבלה שלך?
נסה להשתמש ב-MyISAM. הוא לא טוב במקרה של עדכונים כי הוא נועל את כל הטבלה במקרה כזה, אבל לשליפה הוא יותר מהיר מאשר InnoDB.

בכל אופן, יכול להיות שאפשר לעשות איזשהו קאשינג ולשים X רשומות אחרונות בטבלה קטנה ולשלוף ממנה?

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


כל הזמנים הם GMT +2. הזמן כעת הוא 07:13.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ