MySQL Partitioning + Foreign Keys

FlexCode

New member
MySQL Partitioning + Foreign Keys

יש לי בעיה של טבלת MYSQL עם מנוע INNODB בעלת שתי עמודות:
product_id | customer_id

שזאת בעצם טבלה מקשרת (רבים לרבים) בין מוצרים ללקוחות.
הבעיה היא שהטבלה הגיעה ל-800K רשומות והיא מתחילה להכביד.
הבנתי שיש אפשרות לבצע Partitioning על טבלה, אבל אז אני נאלץ לוותר על ה-Constrains, שזה ייצור מעט יותר איטיות.
ראיתי שיש דרכים עקיפות לבצע foreign keys באמצעות triggers, אבל שוב, אני אעמוד במצב שללא קשרים תיווצר מעט איטיות ב-SELECTs.

אז השאלות הם כאלה:
1. האם Partitioning זה הפתרון שלי או שיש פתרון טוב יותר?
2. אם Partitioning זה הפתרון שאני צריך - האם יש דרך טובה ליישום Foreign keys בלי טריגרים?
3. עד כמה תשפיע העובדה שאני מוותר על ה-Foreign Keys מבחינת שאילתות SELECTs?

אשמח לקצת הבהרות בנושא.
תודה מראש
 

זהר פלד

New member
800 אלף רשומות זה לא הרבה. מה עם אינדקסים?

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

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

שוב, 800 אלף רשומות זה משהו שכל מסד נתונים שמכבד את עצמו אמור להתמודד איתו ואפילו בקלות. אם היית אומר 8 מליון הסיפור כבר היה נראה קצת אחרת.
 

FlexCode

New member
אני כבר עובד עם אינדקסים

אני כבר עובד עם אינדקסים.

אבל יוצא מצב ש:
- כרגע ה-800K מכביד כי אני מבצע שאילתות מורכבות על ה-800K (על אף שאלו הן העמודות היחידות בטבלה).
- זה הולך לגדול פי 3 לפחות.

אני יודע שאפשר כרגע להשתמש ב-cache אבל כאשר הטבלה תגיע ל-3 מליון רשומות אצטרך גם מחיצות, אני טועה?
 
למעלה