שאלה:Stored Procedure

visit1

New member
שאלה:Stored Procedure

1) מתי ישנה עדיפות לרשום Stored Procedure על פני שאילתא רגילה? אני יודע שיש לה יתרון כי היא למעשה פרוצדורה שמאוחסנת ושמורה ויש לה אופציונאליות אל עדין מתי זה עדיף ...ב #C רושמים את זה בקוד רגיל כמו שאליתא רגילה? תודה!!!
 

visit1

New member
תגובה...

מדוע???? לא יותר פשוט לכתוב שאילתא רגילה ופשוטה במקום?? מה ההבדל בין SP ל שאליתא רגילה? תודה
 

זהר פלד

New member
ההבדלים העיקריים שעולים לי לראש:

1) SP נשמרת ומתקמפלת בתוך מסד הנתונים, מה שאומר שהיא תרוץ מהר יותר ובצורה יעילה יותר. 2) SP מאפשרת צמצום הרשאות הגישה של המשתמש - אתה יכול לתת למשתמש הרשאות ל SP עצמה, אבל לא לתת לו הרשאות לטבלאות שבהם מאוחסנים הנתונים - מה שכמובן מוביל לאבטחה טובה הרבה יותר. 3) גם בגלל הסעיף הקודם, וגם בגלל העובדה שב SP אתה יכול גם לבדוק את הנתונים שהיא מקבלת, הרבה יותר קשה לפרוץ בעזרת sql injection לתוכנה שמשתמשת ב sp מאשר בשאילתות בקוד. שוב - אבטחה טובה הרבה יותר. 4) אינקפסולציה של מסד הנתונים. (אם אתה מתכנת oo ולא יודע מה זה אינקפסולציה, או למה זה טוב, זה רע מאוד - גגל את המילה incapsulation) 5) הגישה של sp הרבה יותר מתאימה לגישת התכנות הכללית של oop - אתה יכול לחשוב על מסד נתונים בתור אובייקט, שהמידע בטבלאות שלו הם private members, וה sp הם המתודות. בטח יש עוד כמה דברים שלא חשבתי עליהם, אבל אני, לפחות, מאמין שאלו סיבות מספיק טובות לעבוד אך ורק עם stored procedures ואפפעם לא עם שאילתות בקוד.
 

adam222

New member
../images/Emo45.gif

בקשר לסעיף 1, ב-DB מתקמפל ונשמר ה-execution plan של הפרוצדורה
אחרי ההרצה הראשונה... אלוהים
 

visit1

New member
שאלונת...

הבנתי את כל מה שכתבת ...תודה יש לי שאלה ספציפית...כתבתי אתר באינטרנט ותוכנה ב #C יש שם המון שאילתות חלקן פשוטות וחלקן מסובכות קצת יותר האם היה נכון לרשום במקום כל שאילתא(גם הפשוטה ביותר SELECT * FRON ) SP ??? תודה רבה
 
נשפכו על זה הרבה מילים

באופן כללי, הגישה של "צריך הכל דרך SP" (כל עוד אפשרי) נראית לי לא מתאימה לכל תרחיש. מעבר לתרחיש הבנאלי של חיפוש דינמי לחלוטין (שבו לא ידוע כמה ביטויי חיפוש המשתמש יבקש, ולכן אי אפשר לתת לזה פתרון SP "טהור"), יש מספיק פעמים שבהן כתיבת SP לצורך שליפת נתונים מטבלה כזו או אחרת "לא מצדיקה" כתיבת SP. זאת משום שאז עלול להיווצר מצב של מאות או אלפי פרוצדורות שנוצרו רק כדי לתת מענה לפעולות CRUD לכל טבלה. לא נוח, בלשון המעטה. יש לא מעט מקרים ש SP נותן מענה טוב יותר מבחינת ביצועים ו/או נוחות כתיבה, אבל יש גם מספיק מקרים שבהם statement "רגיל" נותן אותן תוצאות כמו SP. לפעמים גם יש מצב הפוך - שבו SP נותן ביצועים פחות טובים (ב overall) מאשר דרך אחרת (בעיקר אם ה SP כולל IFים). עם זאת, ביצועים זה לא הכל. ברגע שה DB "מפסיק" להיות רק DB ומכיל גם את ה API - לעניות דעתי זה לא בריא למערכות גדולות, בעיקר כי אז הלוגיקה העסקית מתפצלת לשני מקומות: ה DB (ע"י SP) והאפליקציה (ע"י קוד "רגיל"). אבל במקום לחזור על אותם טיעונים לכאן ולשם (ויש טיעונים לשני הצדדים) אני ממליץ לקרוא את המאמר הזה. אל תחסכו מעצמכם את ההערות של הקוראים השונים, אפשר לומר ששם הדיון האמיתי...
 
למעלה