האם נכון ויעיל יותר לכתוב שאילתות בview SQL מאשר בקוד C#?

חבצלת123

משתמש פעיל
D I G I T A L
בתור מתכנתת C# שעובדת מול מסד נתונים גדול ועשיר אני משתמש בשאילתות רבות ומורכבות.
אני עובדת עם entity framework ומשתמשת בlinq לצורך השאילתות שלי.
לאחרונה התחלתי לחשוב אולי עדיף להוציא את כל השאילתות ל(view(sql server - ובקוד C# רק לעשות שליפה מהview.
האם אכן מומלץ?
ואם כן - האם כל שאילתא? או רק את השאילתות הכבדות של המערכת?
 

מ.ש.

משתמש מקצוען
הנדסת תוכנה
D I G I T A L
 

undo

משתמש מקצוען
הנדסת תוכנה
לדעתי - היעיל ביותר זה לתת למומחים לעשות את העבודה שלהם...
הייתי ממליצה על SQL, ואם נדרשים חתכי רוחב, (או שמדובר על כמיות מידע ענקיות - ואז מומלצים חתכי רוחב ) - לעבוד עם פונקציות או פרוצדורות של SQL.
הרבה הצלחה!
 

אסתר א

על ציר מחשבים ומוזיקה..
מנוי פרימיום
מוזיקה ונגינה
הנדסת תוכנה
D I G I T A L
views לא מקבל פרמטרים אז לא יודעת כמה זה יעזור לך. כמעט כל שאילתה מתבססת על הפרמטר כלשהו

לכן פרוצדורות יותר יתאימו למה ששאלת.
אבל לפני כן, יש כמה דברים שצריך לבדוק:
אם את משתמשת ב include כדי לעשות join, עדיף שתוסיפי AsNoTracking()
כי הEF מנהל מעקב אחרי הstate של האוביקטים מה שלוקח זמן
(ובד"כ בשאילתות מחזירים אובייקטים, לא עובדים עליהם או עורכים אותם כך שאין צורך לעקוב אחרי הstate של האוייבייקט אם הוא נערך או נמחק וכוליי)

בנוסף, עדיף JOIN על פני include!

לאחרונה יצא לי לקחת שאילתה שכתובה בlinq + includes ולקחה 40 שניות,
להפוך אותה להשתמש בjoin, וגם אז רק לטבלאות שממש חייבים, ולשאר לעשות .Select().Load()
הזמנים התקצרו ל4 שניות בלבד!

שאילתה מורכבת על result-set מאוד גדול.


וכן, את השאילתה תיהיה בפרוצדורה מאוחסנת (SP), היא וודאי תיהיה מדוייקת יותר ומהירה יותר.
כי LINQ קצת מעמיס על הבנייה של השאילתה.
תלוי שוב באיזה פונקציות LINQ השתמשת.
 

Without meaning

משתמש מקצוען
בתור מתכנתת C# שעובדת מול מסד נתונים גדול ועשיר אני משתמש בשאילתות רבות ומורכבות.
אני עובדת עם entity framework ומשתמשת בlinq לצורך השאילתות שלי.
לאחרונה התחלתי לחשוב אולי עדיף להוציא את כל השאילתות ל(view(sql server - ובקוד C# רק לעשות שליפה מהview.
האם אכן מומלץ?
ואם כן - האם כל שאילתא? או רק את השאילתות הכבדות של המערכת?
בתכנות יש מושג גם של מוקבלות,
אז היום מקובל להוציא הכל ל SQL כולל שאילתות הכי פשוטות של select * from x
יותר נח לעבודה,
יותר יעיל,
ויותר מהיר,

שאילתות קלות ששולפות נטו מטבלאות- מקסימום join קליל' עושים ב view,
דברים יותר מסובכים-if,case,משתנים וכו מכניסים לפרוצדורה
אגב גם view בסופו של דבר מקובל לעטוף בפרוצדורה ולקרוא לפרוצדורה
בסופו של דבר בד"כ view משמש לתהליכים פנימיים בתוך ה SQL (כלומר משתמשים בו בפרוצדורת)ולא נקרא מבחוץ
 

crg

משתמש פעיל
עיצוב גרפי
אם כבר מדברים על פרוצדורות ב SQL- יעזור לי מאוד לדעת האם ואיך אפשר לעדכן פרוצדורה בויזואל סטודיו (C#) ולא לייבא כל פעם חדשה על כל תיקון קל?
 
נערך לאחרונה ב:

מ.ש.

משתמש מקצוען
הנדסת תוכנה
D I G I T A L
אם כבר מדברים על פרוצדורות ב SQL- יעזור לי מאוד לדעת האם ואיך אפשר לעדכן פרוצדורה בויזואל סטודיו (C#) ולא לייבא כל פעם חדשה על כל תיקון קל?
דרך entity framework?
 
  • תודה
Reactions: crg

חבצלת123

משתמש פעיל
D I G I T A L
תבדקי אם זאת לא איזו שגיאה שמתחבאת לך ומפריעה לעדכון
 
  • תודה
Reactions: crg

מרנדרת

משתמש מקצוען
זה לא שגיאה,
נתקלתי בזה הרבה פעמים.
זה איזה משהו תקול במנגנון של העדכון של הENTITY בפרויקט.
לדעתי אם זה משהו שמפריע לך ברציף תעבירי את הפרויקט לSOLUTION חדש,
זה מאמץ רב, אבל פותר את הבעיה, מנסיון.
 
  • תודה
Reactions: crg

אולי מעניין אותך גם...

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק קכב

א שִׁיר הַמַּעֲלוֹת לְדָוִד שָׂמַחְתִּי בְּאֹמְרִים לִי בֵּית יְהוָה נֵלֵךְ:ב עֹמְדוֹת הָיוּ רַגְלֵינוּ בִּשְׁעָרַיִךְ יְרוּשָׁלִָם:ג יְרוּשָׁלִַם הַבְּנוּיָה כְּעִיר שֶׁחֻבְּרָה לָּהּ יַחְדָּו:ד שֶׁשָּׁם עָלוּ שְׁבָטִים שִׁבְטֵי יָהּ עֵדוּת לְיִשְׂרָאֵל לְהֹדוֹת לְשֵׁם יְהוָה:ה כִּי שָׁמָּה יָשְׁבוּ כִסְאוֹת לְמִשְׁפָּט כִּסְאוֹת לְבֵית דָּוִיד:ו שַׁאֲלוּ שְׁלוֹם יְרוּשָׁלִָם יִשְׁלָיוּ אֹהֲבָיִךְ:ז יְהִי שָׁלוֹם בְּחֵילֵךְ שַׁלְוָה בְּאַרְמְנוֹתָיִךְ:ח לְמַעַן אַחַי וְרֵעָי אֲדַבְּרָה נָּא שָׁלוֹם בָּךְ:ט לְמַעַן בֵּית יְהוָה אֱלֹהֵינוּ אֲבַקְשָׁה טוֹב לָךְ:
נקרא  17  פעמים

לוח מודעות

למעלה