דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. מה יותר טוב? DB

מה יותר טוב? DB

מתוזמן נעוץ נעול הועבר תכנות
17 פוסטים 5 כותבים 300 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • ש מנותק
    ש מנותק
    ש.ב.ח.
    כתב ב נערך לאחרונה על ידי
    #1

    האם עדיף להשתמש בתנאי על מנת לאחזר פחות רשומות או שהתנאי וכמות הרשומות שווה בערכם?
    ההפרש בכמות הרשומות יכול להגיע לשאילתה בין 100-2000.

    dovidD תגובה 1 תגובה אחרונה
    0
    • dovidD מחובר
      dovidD מחובר
      dovid ניהול
      השיב לש.ב.ח. ב נערך לאחרונה על ידי
      #2

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

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      ש תגובה 1 תגובה אחרונה
      1
      • ש מנותק
        ש מנותק
        ש.ב.ח.
        השיב לdovid ב נערך לאחרונה על ידי ש.ב.ח.
        #3

        @dovid תודה על התגובה.
        ראשית חדדת לי מאוד את הנקודה:

        @dovid אמר במה יותר טוב? DB:

        תעבורת רשת משמעותית כשהמסד והקוד לא באותו מכונה

        הווה אומר שגם אם היום זה על אותה מכונה צריך לקחת בחשבון כאשר אם והיה וזה יתפצל זה יוסיף תעבורה בעת שהנתונים עוברים ממכונה אחת לשניה.

        לגבי:
        @dovid אמר במה יותר טוב? DB:

        ייחס לכמה רשומות

        לצערי לא הבנתי שאלתך, אם אתה מתכוון כמה רשומות יש בטבלה התשובה היא מיליוני רשומות.

        @dovid אמר במה יותר טוב? DB:

        המסד נתונים לא עושה את זה גרוע ממנו

        בהקשר לנקודה זאת אני מסכם לעצמי, שאם הקוד כדי לכתוב שאילתות ארוך מידי ומייגע אני יכול לוותר על זה ולתת לשרת לסנן. (אני משתמש בבונה שאילתות של לאראול עם יחסים רהוטים (בתרגום ללשה"ק) מה שגורם לקושי לעבור על כל יחס ולעדכן את ההתניות שלו).

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

        dovidD תגובה 1 תגובה אחרונה
        1
        • dovidD מחובר
          dovidD מחובר
          dovid ניהול
          השיב לש.ב.ח. ב נערך לאחרונה על ידי dovid
          #4

          @ש-ב-ח אמר במה יותר טוב? DB:

          לצערי לא הבנתי שאלתך, אם אתה מתכוון כמה רשומות יש בטבלה התשובה היא מיליוני רשומות.

          לא, אתה ציינת הפרש של100-1000 אבל לא ציינת כמה אחוז הם ממה שכן חוזר בכל מקרה. למשל אם אתה שולף 10K רשומות, והסינון חוסך אלף נוספים, זה 10 אחוז, וזה לא משמעותי מבחינת הקריאה מהדיסק. אבל אם הסינון מחזיר רק רשומה בודדת ובלעדיו יש עוד מאה, וזה עם אינדקס (כי אם לא אז דיסק יש בכל מקרה על כל הרשומות ורק אולי נחסך קצת זיכרון), אז חסכנו הרבה קריאה מהדיסק (99%).

          @ש-ב-ח אמר במה יותר טוב? DB:

          בהקשר לנקודה זאת אני מסכם לעצמי, שאם הקוד כדי לכתוב שאילתות ארוך מידי ומייגע אני יכול לוותר על זה ולתת לשרת לסנן. (אני משתמש בבונה שאילתות של לאראול עם יחסים רהוטים (בתרגום ללשה"ק) מה שגורם לקושי לעבור על כל יחס ולעדכן את ההתניות שלו).

          בהחלט, אני עושה את זה הרבה פעמים.

          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

          בכל נושא אפשר ליצור קשר dovid@tchumim.com

          ש תגובה 1 תגובה אחרונה
          0
          • ש מנותק
            ש מנותק
            ש.ב.ח.
            השיב לdovid ב נערך לאחרונה על ידי
            #5

            @dovid אמר במה יותר טוב? DB:

            אבל לא ציינת כמה אחוז הם ממה שכן חוזר בכל מקרה

            אהה, צודק לא הייתי ברור, כוונתי שבמקום 100 חוזר 1000

            תגובה 1 תגובה אחרונה
            0
            • yossizY מנותק
              yossizY מנותק
              yossiz
              כתב ב נערך לאחרונה על ידי yossiz
              #6

              אני חושב שאפשר לעשות "כלל בוהןאצבע" שתמיד יותר לתת למסד לסנן מאשר לסנן בעצמך בקוד

              📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

              ש תגובה 1 תגובה אחרונה
              0
              • ש מנותק
                ש מנותק
                ש.ב.ח.
                השיב לyossiz ב נערך לאחרונה על ידי ש.ב.ח.
                #7

                @yossiz אמר במה יותר טוב? DB:

                אני חושב שאפשר לעשות כלל בוהן שתמיד יותר לתת למסד לסנן מאשר לסנן בעצמך בקוד

                אני גם חשבתי כך בתחילה אבל נתקלתי בבעיה שהוכרחתי לחשב מסלול מחדש...

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

                yossizY תגובה 1 תגובה אחרונה
                1
                • yossizY מנותק
                  yossizY מנותק
                  yossiz
                  השיב לש.ב.ח. ב נערך לאחרונה על ידי
                  #8

                  @ש-ב-ח
                  א) "כלל אצבע" לא חייב להיות תמיד צודק.
                  ב) הכלל אמור להיות נכון רק במקרה שמה שאתה מצהיר בשאילתא שאתה רוצה מה-DB הוא בערך אותו דבר כמו הסינון שהיית עושה בקוד. אז אפשר להניח שה-DB יודע את העבודה יותר טוב ממך. אבל במקרה שלך נראה שזה לא נכון.

                  📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                  ש תגובה 1 תגובה אחרונה
                  1
                  • ש מנותק
                    ש מנותק
                    ש.ב.ח.
                    השיב לyossiz ב נערך לאחרונה על ידי
                    #9

                    @yossiz אמר במה יותר טוב? DB:

                    רק במקרה שמה שאתה מצהיר בשאילתא שאתה רוצה מה-DB הוא בערך אותו דבר כמו הסינון שהיית עושה בקוד

                    לפעמים אני מתעקש שלא להבין לבד, @yossiz אשמח להבהרה מפורטת.

                    yossizY 2 תגובות תגובה אחרונה
                    1
                    • yossizY מנותק
                      yossizY מנותק
                      yossiz
                      השיב לש.ב.ח. ב נערך לאחרונה על ידי
                      #10

                      @ש-ב-ח אתה צודק. התעצלתי לבדוק את המקרה שלך שציינת ולכן כתבתי קצת מעומעם לכסות את עצמי... בל"נ אם יהיה לי כח אנסה להבין מה שונה שם מבמקרה שבו הכלל כן תקף ולהסביר בצורה ברורה (או לחזור בי מהכלל)

                      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                      תגובה 1 תגובה אחרונה
                      0
                      • OdedDvirO מנותק
                        OdedDvirO מנותק
                        OdedDvir
                        כתב ב נערך לאחרונה על ידי
                        #11

                        אני לא מצליח להבין את השאלה המקורית, מישהו יכול להסביר לי במילים פשוטות? 😕

                        dovidD תגובה 1 תגובה אחרונה
                        1
                        • dovidD מחובר
                          dovidD מחובר
                          dovid ניהול
                          השיב לOdedDvir ב נערך לאחרונה על ידי
                          #12

                          @OdedDvir האם where מעבר למה שהוא מצמצם שורות, הוא חוסך ביצועים?
                          למשל לא אכפת לי לקבל 100,000 שורות (אני בכל מקרה קורא רק את הראשון)
                          האם יש עניין לצמצם? במקרה של השואל היה מדובר בwhere שמצמצם את התוצאה ב90 אחוז.

                          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                          בכל נושא אפשר ליצור קשר dovid@tchumim.com

                          צבי-שצ תגובה 1 תגובה אחרונה
                          4
                          • צבי-שצ מחובר
                            צבי-שצ מחובר
                            צבי-ש
                            השיב לdovid ב נערך לאחרונה על ידי
                            #13

                            @dovid אמר במה יותר טוב? DB:

                            @OdedDvir האם where מעבר למה שהוא מצמצם שורות, הוא חוסך ביצועים?
                            למשל לא אכפת לי לקבל 100,000 שורות (אני בכל מקרה קורא רק את הראשון)
                            האם יש עניין לצמצם? במקרה של השואל היה מדובר בwhere שמצמצם את התוצאה ב90 אחוז.

                            where לא עובר על כל השורות ומביא לך רק את מי שתואם?
                            ככה אני לתומי חשבתי.

                            כיף לגלות דברים חדשים.
                            חוק ה-50-50-90: בכל פעם שיש סיכוי של 50-50 שמשהו יעבוד, יש סיכוי של 90 אחוז שהוא לא. מקור

                            תגובה 1 תגובה אחרונה
                            0
                            • yossizY מנותק
                              yossizY מנותק
                              yossiz
                              השיב לש.ב.ח. ב נערך לאחרונה על ידי yossiz
                              #14

                              @ש-ב-ח בשאילתא שאתה מביא פה יש המון תתי שאילתות, אז אתה גורם ל-DB לעבור שוב ושוב על אותה טבלה. (למרות שלפום ריהטא, אם יש אינדקסים נכונים, השאילתה עדיין אמור להיות די זול).
                              קצת תמוה לי מאיפה לקחת את השאילתה שם, זה נראה קוד מכונה, לכאורה מיוצר על ידי ה-ORM של laravel? ולמה ה-ORM עושה כל התתי שאילתות? במקרה שם זה נראה מיותר לגמרי, היה אפשר לפשט הרבה את השאילתה

                              עריכה: הבנתי למה צריך תתי שאילתה, (חשבתי מקודם שאפשר על ידי JOIN פשוט). אבל עדיין נראה לי שאפשר למטב מאוד את השאילתה שם באמצעות תת-שאילתה יחידה שמביאה את כל המטא דאטה בבת אחת (לא יודע כמה קל לבטא דבר כזה ב-eloquent ORM)

                              ועוד הערה: אם היית משתמש ב-API של וורדפרס לכאורה היית מקבל מן המוכן פונקציה שעושה שאילתה ממוטבת הדק היטב.

                              📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                              ש תגובה 1 תגובה אחרונה
                              1
                              • yossizY מנותק
                                yossizY מנותק
                                yossiz
                                כתב ב נערך לאחרונה על ידי yossiz
                                #15

                                המשך,

                                ממילא אני חוזר שוב לנושא של אשכול זה:

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

                                אבל זה בתנאי שמה שהיית עושה בקוד, זה בדיוק מה שאתה מבקש מה-DB לעשות, אבל אם בקוד היית עושה לולאה אחת על הדאטה, וב-SQL אתה מבקש מה-DB לעשות 120 לולאות, אז הדבר שונה.

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

                                @ש-ב-ח אמר במה יותר טוב? DB:

                                אני גם חשבתי כך בתחילה אבל נתקלתי בבעיה שהוכרחתי לחשב מסלול מחדש...
                                כי הכלל נכון בתנאי שהשאילה לא מסובכת מידי שאילתה כזאת יכולה לקחת יותר מדקה בטבלה 2 מליון שורות (מנסיון)
                                אבל בצורה של הורדת כל הרשומות של החישוב ובלי מידי להתקשקש בעמודות נקבל את התוצאות השוות לשאילתה הזאת בשניה או פחות... (מנסיון)

                                אם אתה מסתמך על דוגמה זו, אז אני לא חושב שזו דוגמה מייצגת, כנ"ל

                                📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                                תגובה 1 תגובה אחרונה
                                1
                                • ש מנותק
                                  ש מנותק
                                  ש.ב.ח.
                                  השיב לyossiz ב נערך לאחרונה על ידי
                                  #16

                                  @yossiz אמר במה יותר טוב? DB:

                                  אם היית משתמש ב-API של וורדפרס לכאורה היית מקבל מן המוכן פונקציה שעושה שאילתה ממוטבת הדק היטב

                                  לא מכיר בAPI של וורדפרס אפשרות יחסים בין פוסט לפוסט ברמת המטא נתונים

                                  @yossiz אמר במה יותר טוב? DB:

                                  אבל עדיין נראה לי שאפשר למטב מאוד את השאילתה שם באמצעות תת-שאילתה יחידה שמביאה את כל המטא דאטה בבת אחת

                                  ממש מעניין אותי, איך?

                                  yossizY תגובה 1 תגובה אחרונה
                                  0
                                  • yossizY מנותק
                                    yossizY מנותק
                                    yossiz
                                    השיב לש.ב.ח. ב נערך לאחרונה על ידי
                                    #17

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

                                    📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                                    תגובה 1 תגובה אחרונה
                                    0

                                    בא תתחבר לדף היומי!
                                    • התחברות

                                    • אין לך חשבון עדיין? הרשמה

                                    • התחברו או הירשמו כדי לחפש.
                                    • פוסט ראשון
                                      פוסט אחרון
                                    0
                                    • דף הבית
                                    • קטגוריות
                                    • פוסטים אחרונים
                                    • משתמשים
                                    • חיפוש
                                    • חוקי הפורום