
24-05-2007, 14:34
|
 |
|
|
חבר מתאריך: 30.10.01
הודעות: 8,699
|
|
|
|
|
פעולה על טבלה שלמה....
פעולות על טבלה שלמה הן בעייתיות באופן כרוני.
הנה מספר טיפים שיעזרו לך להתמודד:
1. אם יש אינדקס על העמודה המתעדכנת - שקול את נחיצותו בשנית (חבל לעדכן גם טבלה וגם אינדקס)
2. נסה לחלק את הפעולה לחלקים (למשל, עדכן רשומות מסויימות בכל פעם לפי מפתח) ונסה לבצע כל חלק במקביל באפליקציה.
3. באורקל, הייתי מציע לך לשקול שימוש במקביליות בפעולה כתלות במספר המעבדים העומדים לרשותך (parallel hint) אבל אינני יודע אם וכיצד ניתן לבצע זאת בmySql
4. שקול את מבנה מסד הנתונים שלך - אולי ניתן בעזרת מפתח זר לעדכן מעט נתונים בטבלה אחרת במקום לשנות את כל הטבלה הראשית.
לדוגמה (4) : אם רוצים לשמור לכל עובד גם את פרטי המחלקה שבה הוא עובד כדאי לעשות זאת על ידי קוד מחלקה - כך אם המחלקה כולה עוברת מקום למשל ניתן לעדכן רשומה אחת בלבד בטבלת המחלקות עבור כל עובדי המחלקה.
קוד:
SQL> select E.ENAME,E.JOB,E.DEPTNO,D.DNAME,D.LOC
2 from EMP E, DEPT D
3 where E.DEPTNO=D.DEPTNO;
ENAME JOB DEPTNO DNAME LOC
---------- --------- ---------- -------------- -------------
SMITH CLERK 20 RESEARCH DALLAS
ALLEN SALESMAN 30 SALES CHICAGO
WARD SALESMAN 30 SALES CHICAGO
JONES MANAGER 20 RESEARCH DALLAS
MARTIN SALESMAN 30 SALES CHICAGO
BLAKE MANAGER 30 SALES CHICAGO
CLARK MANAGER 10 ACCOUNTING NEW YORK
SCOTT ANALYST 20 RESEARCH DALLAS
KING PRESIDENT 10 ACCOUNTING NEW YORK
TURNER SALESMAN 30 SALES CHICAGO
ADAMS CLERK 20 RESEARCH DALLAS
JAMES CLERK 30 SALES CHICAGO
FORD ANALYST 20 RESEARCH DALLAS
MILLER CLERK 10 ACCOUNTING NEW YORK
14 rows selected.
SQL> update DEPT set LOC='TEL AVIV' where DEPTNO=30;
1 row updated.
SQL> select E.ENAME,E.JOB,E.DEPTNO,D.DNAME,D.LOC
2 from EMP E, DEPT D
3 where E.DEPTNO=D.DEPTNO;
ENAME JOB DEPTNO DNAME LOC
---------- --------- ---------- -------------- -------------
SMITH CLERK 20 RESEARCH DALLAS
ALLEN SALESMAN 30 SALES TEL AVIV
WARD SALESMAN 30 SALES TEL AVIV
JONES MANAGER 20 RESEARCH DALLAS
MARTIN SALESMAN 30 SALES TEL AVIV
BLAKE MANAGER 30 SALES TEL AVIV
CLARK MANAGER 10 ACCOUNTING NEW YORK
SCOTT ANALYST 20 RESEARCH DALLAS
KING PRESIDENT 10 ACCOUNTING NEW YORK
TURNER SALESMAN 30 SALES TEL AVIV
ADAMS CLERK 20 RESEARCH DALLAS
JAMES CLERK 30 SALES TEL AVIV
FORD ANALYST 20 RESEARCH DALLAS
MILLER CLERK 10 ACCOUNTING NEW YORK
14 rows selected.
_____________________________________
_________________________________________________
אזהרה: משרד הבריאות קובע כי העישון מזיק לבריאות !
תראו, אפילו החייזר נהיה ירוק מזה
|