mysql סינון בטבלה מרובת שורות
-
יש לי טבלה של מענה על מבחנים שנכון לרגע תחילת כתיבת הפוסט עומד ב 9205714 שורות.
בטבלה נשמרים פחות או יותר, עמודת מזהה (A I), זהות, תאריך, מזהה מסלול, ושאר הפרטים כתאריך שעה ומה הקיש וכו.
ב"ה האינדקסים בסדר, אין בעיות בסינון ושליפה לפי תאריך ולפי מסלול.
יש לי גם עמודה בשם "ProjectID" שכל עוד יש רק פרוייקט אחד בטבלה זו אני לא אמור לסנן על פיה.
פה ושם עלו בקשות לבנות תוכנית מקבילה, ואז בעצם אני יצטרך להתחיל לסנן גם לפי העמודה ProjectID (שהיא עמודת varchar(25)).
הבעיה היא שכשניסיתי לחבר בממשק שמציג את הטבלה שיסנן גם את העמודה ProjectID לפי הלקוח המחובר, אז זה היה סיוט, הCPU השתולל ולקח המון זמן.
למרות שעשיתי עליו אינדקס (וס"ה כל הטבלה הייתה באמת אותו פרוייקט).
אציין שבממשק בכל הצגה של טבלה מבוצעים 2 שאילתות, א. שליפת השורות עם limit 2000 ב. שליפת count של כל השורות שעונות לסינון הנוכחי.
אני לא יודע להגיד כ"כ באיזה מהם הייתה הבעיה, אבל מה שבטוח שזה גרם להשתוללות CPU ואיטיות המערכת.
יש מצב ודרך איך להתמודד או שאהיה מוכרח לפתוח טבלה נפרדת לכל לקוח?
תודה
נ.ב. נכון לסיום הכתיבה זה כבר עלה ל 9205912 -
@nigun אמר בmysql סינון בטבלה מרובת שורות:
@חוקר
שאלת תם
למה לא לעשות כל פרוייקט בטבלה אחרת?הפרוייקט מורכב מ 20/30 טבלאות (מסלולי לימוד/ מנויים/ השאלות והתשובות/זוכים וכו')
הכי קל בכל טבלה יש עמודה מזהה פרוייקט ואז ללא שום בעיה אתה מוסיף פרוייקטים כרצונך ללא שום עבודה של הקמת טבלאות לכל פרוייקט.
בנוסף, אני משתמש בממשק CRUD שבנוי מפריימורק PHP בשם YII2, שם יש להקים מודלים לכל טבלה, ואני חוסך את זה כשכולם מחוברים לאותו מודל יחיד לכל טבלה.
ואפילו בפרוייקט של 2 טבלאות זה מה שהייתי עושה.
דוגמא פרקטית: במערכות שבניתי כעת לתתים וישיבות יש פחות מ20 טבלאות.. בשיטה שלי, להוסיף לקוח חדש זה ס"ה שורה נוספת בעמודה פרוייקטים, וב"ה יש הרבה לקוחות שם.. אם הייתי מתעסק לכל אחד להקים טבלאות, אוי ואבוי..