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

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

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

הפורום כעת לקריאה בלבד, לקריאה נוספת.

איך עושים JOIN?

מתוזמן נעוץ נעול הועבר תכנות
56 פוסטים 4 כותבים 1.8k צפיות 3 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • nigunN nigun

    @OdedDvir
    בשניהם זה נתקע.
    אולי אני ישאיר את זה לחצי שעה
    ונראה מתי זה מצליח להביא את התוצאות בסוף.

    nigunN
    nigunN
    nigun
    כתב ב נערך לאחרונה על ידי
    #15

    @nigun אמר באיך עושים JOIN?:

    @OdedDvir
    בשניהם זה נתקע.
    אולי אני ישאיר את זה לחצי שעה
    ונראה מתי זה מצליח להביא את התוצאות בסוף.

    בדקתי עכשיו
    ואני רואה שהבקשה ארכה 31 דקות!!!!
    מעניין מה ההבדל?

    מייל: nigun@duck.com

    OdedDvirO תגובה 1 תגובה אחרונה
    0
    • OdedDvirO OdedDvir

      @nigun אמר באיך עושים JOIN?:

      אולי אני ישאיר את זה לחצי שעה

      אני עדיין מציע לך לבצע סינון WHERE לפי הקבוצה לפני הJOIN, ולהרוויח את הזמן הזה:

      SELECT P.user, P.points,I.nameText
      FROM (SELECT * FROM points WHERE points.grup=123) AS P
      JOIN (SELECT * FROM userinfo WHERE userinfo.grup=123) AS I
      ON P.user=I.user; 
      
      nigunN
      nigunN
      nigun
      כתב ב נערך לאחרונה על ידי
      #16

      @OdedDvir אמר באיך עושים JOIN?:

      @nigun אמר באיך עושים JOIN?:

      אולי אני ישאיר את זה לחצי שעה

      אני עדיין מציע לך לבצע סינון WHERE לפי הקבוצה לפני הJOIN, ולהרוויח את הזמן הזה:

      SELECT P.user, P.points,I.nameText
      FROM (SELECT * FROM points WHERE points.grup=123) AS P
      JOIN (SELECT * FROM userinfo WHERE userinfo.grup=123) AS I
      ON P.user=I.user; 
      

      יפה
      עכשיו זה ירד ל0.23 שניות.

      מייל: nigun@duck.com

      תגובה 1 תגובה אחרונה
      1
      • dovidD
        dovidD
        dovid
        ניהול
        כתב ב נערך לאחרונה על ידי
        #17

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

        • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
        • בכל נושא אפשר ליצור קשר dovid@tchumim.com
        nigunN תגובה 1 תגובה אחרונה
        1
        • dovidD dovid

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

          nigunN
          nigunN
          nigun
          כתב ב נערך לאחרונה על ידי
          #18

          @dovid
          אז מה השתבש אצלי?

          מייל: nigun@duck.com

          dovidD תגובה 1 תגובה אחרונה
          0
          • nigunN nigun

            @dovid
            אז מה השתבש אצלי?

            dovidD
            dovidD
            dovid
            ניהול
            כתב ב נערך לאחרונה על ידי
            #19

            @nigun זה מה שאני שואל את עצמי לאורך כל האשכול.

            • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
            • בכל נושא אפשר ליצור קשר dovid@tchumim.com
            תגובה 1 תגובה אחרונה
            1
            • nigunN nigun

              @nigun אמר באיך עושים JOIN?:

              @OdedDvir
              בשניהם זה נתקע.
              אולי אני ישאיר את זה לחצי שעה
              ונראה מתי זה מצליח להביא את התוצאות בסוף.

              בדקתי עכשיו
              ואני רואה שהבקשה ארכה 31 דקות!!!!
              מעניין מה ההבדל?

              OdedDvirO
              OdedDvirO
              OdedDvir
              כתב ב נערך לאחרונה על ידי
              #20

              @nigun אמר באיך עושים JOIN?:

              מעניין מה ההבדל?

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

              @dovid אמר באיך עושים JOIN?:

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

              אולי עדיף לא להשאיר את הדבר בידיים של הDB איפה שאפשר בקלות לקבוע את הסדר כדלעיל?

              dovidD תגובה 1 תגובה אחרונה
              1
              • nigunN
                nigunN
                nigun
                כתב ב נערך לאחרונה על ידי
                #21

                בהמשך לשאלה הנ"ל
                לפעמים יש משתמשים שלא רשומים ב userinfo
                אבל אני בכל זאת אני רוצה לקבל את הרשומה שלהם בpoints
                איך אני כותב את השאילתא?

                מייל: nigun@duck.com

                OdedDvirO תגובה 1 תגובה אחרונה
                0
                • nigunN nigun

                  בהמשך לשאלה הנ"ל
                  לפעמים יש משתמשים שלא רשומים ב userinfo
                  אבל אני בכל זאת אני רוצה לקבל את הרשומה שלהם בpoints
                  איך אני כותב את השאילתא?

                  OdedDvirO
                  OdedDvirO
                  OdedDvir
                  כתב ב נערך לאחרונה על ידי
                  #22

                  @nigun בעיקרון אתה כותב LEFT JOIN במקום JOIN

                  dovidD תגובה 1 תגובה אחרונה
                  2
                  • OdedDvirO OdedDvir

                    @nigun בעיקרון אתה כותב LEFT JOIN במקום JOIN

                    dovidD
                    dovidD
                    dovid
                    ניהול
                    כתב ב נערך לאחרונה על ידי dovid
                    #23

                    LEFT JOIN זה למקרה שאתה רוצה את כל השורות של הטבלה שצויינה ראשונה (שזה לשמאל הביטוי JOIN). למקרה הפוך יש RIGHT JOIN. הברירת מחדל היא INNER שזה רק הזהים, ויש את FULL שזה הכל משני הצדדים. בחלק ממסדי הנתונים האחרון לא נתמך.

                    • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                    • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                    תגובה 1 תגובה אחרונה
                    4
                    • OdedDvirO OdedDvir

                      @nigun אמר באיך עושים JOIN?:

                      מעניין מה ההבדל?

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

                      @dovid אמר באיך עושים JOIN?:

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

                      אולי עדיף לא להשאיר את הדבר בידיים של הDB איפה שאפשר בקלות לקבוע את הסדר כדלעיל?

                      dovidD
                      dovidD
                      dovid
                      ניהול
                      כתב ב נערך לאחרונה על ידי
                      #24

                      @OdedDvir אמר באיך עושים JOIN?:

                      אולי עדיף לא להשאיר את הדבר בידיים של הDB איפה שאפשר בקלות לקבוע את הסדר כדלעיל?

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

                      • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                      • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                      OdedDvirO תגובה 1 תגובה אחרונה
                      2
                      • dovidD dovid

                        @OdedDvir אמר באיך עושים JOIN?:

                        אולי עדיף לא להשאיר את הדבר בידיים של הDB איפה שאפשר בקלות לקבוע את הסדר כדלעיל?

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

                        OdedDvirO
                        OdedDvirO
                        OdedDvir
                        כתב ב נערך לאחרונה על ידי OdedDvir
                        #25

                        @dovid אמר באיך עושים JOIN?:

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

                        אני עדיין אוחז ב"תגיד מה אתה רוצה ועדיין תדאג"...

                        מקרה שבו הDB כ"כ מזייף הוא משונה מאוד. ב99% מהמקרים הDB חכם מספיק לעשות את הסדר הכי טוב.

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

                        dovidD nigunN 2 תגובות תגובה אחרונה
                        1
                        • OdedDvirO OdedDvir

                          @dovid אמר באיך עושים JOIN?:

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

                          אני עדיין אוחז ב"תגיד מה אתה רוצה ועדיין תדאג"...

                          מקרה שבו הDB כ"כ מזייף הוא משונה מאוד. ב99% מהמקרים הDB חכם מספיק לעשות את הסדר הכי טוב.

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

                          dovidD
                          dovidD
                          dovid
                          ניהול
                          כתב ב נערך לאחרונה על ידי
                          #26

                          @OdedDvir אמר באיך עושים JOIN?:

                          @dovid אמר באיך עושים JOIN?:

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

                          אני עדיין אוחז ב"תגיד מה אתה רוצה ועדיין תדאג"...

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

                          • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                          • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                          OdedDvirO תגובה 1 תגובה אחרונה
                          3
                          • dovidD dovid

                            @OdedDvir אמר באיך עושים JOIN?:

                            @dovid אמר באיך עושים JOIN?:

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

                            אני עדיין אוחז ב"תגיד מה אתה רוצה ועדיין תדאג"...

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

                            OdedDvirO
                            OdedDvirO
                            OdedDvir
                            כתב ב נערך לאחרונה על ידי
                            #27

                            @dovid אמר באיך עושים JOIN?:

                            זה לא נורמלי, במקרים רגילים אמורים להיות רגועים לחלוטין.

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

                            נו, עוד מסמר בארון של אקסס...

                            dovidD תגובה 1 תגובה אחרונה
                            1
                            • OdedDvirO OdedDvir

                              @dovid אמר באיך עושים JOIN?:

                              זה לא נורמלי, במקרים רגילים אמורים להיות רגועים לחלוטין.

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

                              נו, עוד מסמר בארון של אקסס...

                              dovidD
                              dovidD
                              dovid
                              ניהול
                              כתב ב נערך לאחרונה על ידי
                              #28

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

                              • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                              • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                              OdedDvirO תגובה 1 תגובה אחרונה
                              1
                              • dovidD dovid

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

                                OdedDvirO
                                OdedDvirO
                                OdedDvir
                                כתב ב נערך לאחרונה על ידי OdedDvir
                                #29

                                @dovid אמר באיך עושים JOIN?:

                                אתה מדבר על שאילות רציניות מאוד

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

                                תגובה 1 תגובה אחרונה
                                0
                                • OdedDvirO OdedDvir

                                  @dovid אמר באיך עושים JOIN?:

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

                                  אני עדיין אוחז ב"תגיד מה אתה רוצה ועדיין תדאג"...

                                  מקרה שבו הDB כ"כ מזייף הוא משונה מאוד. ב99% מהמקרים הDB חכם מספיק לעשות את הסדר הכי טוב.

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

                                  nigunN
                                  nigunN
                                  nigun
                                  כתב ב נערך לאחרונה על ידי
                                  #30

                                  @OdedDvir אמר באיך עושים JOIN?:

                                  מקרה שבו הDB כ"כ מזייף הוא משונה מאוד. ב99% מהמקרים הDB חכם מספיק לעשות את הסדר הכי טוב.

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

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

                                  מייל: nigun@duck.com

                                  OdedDvirO תגובה 1 תגובה אחרונה
                                  0
                                  • nigunN nigun

                                    @OdedDvir אמר באיך עושים JOIN?:

                                    מקרה שבו הDB כ"כ מזייף הוא משונה מאוד. ב99% מהמקרים הDB חכם מספיק לעשות את הסדר הכי טוב.

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

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

                                    OdedDvirO
                                    OdedDvirO
                                    OdedDvir
                                    כתב ב נערך לאחרונה על ידי
                                    #31

                                    @nigun התחביר הוא:

                                    EXPLAIN ANALYZE <SQL>
                                    

                                    כלומר:

                                    EXPLAIN ANALYZE SELECT points.user, points.points FROM points JOIN info ON info.user=points.user
                                    
                                    nigunN תגובה 1 תגובה אחרונה
                                    3
                                    • OdedDvirO OdedDvir

                                      @nigun התחביר הוא:

                                      EXPLAIN ANALYZE <SQL>
                                      

                                      כלומר:

                                      EXPLAIN ANALYZE SELECT points.user, points.points FROM points JOIN info ON info.user=points.user
                                      
                                      nigunN
                                      nigunN
                                      nigun
                                      כתב ב נערך לאחרונה על ידי
                                      #32

                                      @OdedDvir
                                      נראה שזה לא זמין בגירסת MYSQL שלי
                                      אז עשיתי EXPLAIN EXTENDED

                                      +----+-------------+----------+------+---------------+------+---------+------+--------+----------+----------------------------------------------------+
                                      | id | select_type | table    | type | possible_keys | key  | key_len | ref  | rows   | filtered | Extra                                              |
                                      +----+-------------+----------+------+---------------+------+---------+------+--------+----------+----------------------------------------------------+
                                      |  1 | SIMPLE      | userinfo | ALL  | NULL          | NULL | NULL    | NULL |  30410 |   100.00 | NULL                                               |
                                      |  1 | SIMPLE      | points   | ALL  | NULL          | NULL | NULL    | NULL | 359834 |   100.00 | Using where; Using join buffer (Block Nested Loop) |
                                      +----+-------------+----------+------+---------------+------+---------+------+--------+----------+----------------------------------------------------+
                                      
                                      

                                      מייל: nigun@duck.com

                                      OdedDvirO תגובה 1 תגובה אחרונה
                                      0
                                      • nigunN nigun

                                        @OdedDvir
                                        נראה שזה לא זמין בגירסת MYSQL שלי
                                        אז עשיתי EXPLAIN EXTENDED

                                        +----+-------------+----------+------+---------------+------+---------+------+--------+----------+----------------------------------------------------+
                                        | id | select_type | table    | type | possible_keys | key  | key_len | ref  | rows   | filtered | Extra                                              |
                                        +----+-------------+----------+------+---------------+------+---------+------+--------+----------+----------------------------------------------------+
                                        |  1 | SIMPLE      | userinfo | ALL  | NULL          | NULL | NULL    | NULL |  30410 |   100.00 | NULL                                               |
                                        |  1 | SIMPLE      | points   | ALL  | NULL          | NULL | NULL    | NULL | 359834 |   100.00 | Using where; Using join buffer (Block Nested Loop) |
                                        +----+-------------+----------+------+---------------+------+---------+------+--------+----------+----------------------------------------------------+
                                        
                                        
                                        OdedDvirO
                                        OdedDvirO
                                        OdedDvir
                                        כתב ב נערך לאחרונה על ידי
                                        #33

                                        @nigun איזו גירסא יש לך?

                                        nigunN תגובה 1 תגובה אחרונה
                                        0
                                        • OdedDvirO OdedDvir

                                          @nigun איזו גירסא יש לך?

                                          nigunN
                                          nigunN
                                          nigun
                                          כתב ב נערך לאחרונה על ידי
                                          #34

                                          @OdedDvir
                                          mysql 5.6.49

                                          מייל: nigun@duck.com

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

                                          שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.

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

                                          בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗

                                          הרשמה התחברות
                                          תגובה
                                          • תגובה כנושא
                                          התחברו כדי לפרסם תגובה
                                          • מהישן לחדש
                                          • מהחדש לישן
                                          • הכי הרבה הצבעות


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

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