שאלת יעילות 2 SELECT או JOIN

rotemNO1

New member
שאלת יעילות 2 SELECT או JOIN

אם אני צריכה 2 נתונים מ-2 טבלאות שיש ביניהם קשר, עדיף לי לעשות 2 SELECT פשוטים במבנה SELECT * FROM TBL WHERE ID=1 או לעשות SELECT אחד עם JOIN ל-2 הטבלאות ולפתוח קישור אחד לDB. יש לציין שב2 האפשרויות, אני פותחת את הטבלה, מעתיקה את הנתון הנדרש למשתנה וסוגרת מיד.. בתודה מראש למומחים... ד"א משהו מכיר איפה אפשר ללמוד על יעילות של שאילתות.. לדוג' מתי עדיף להשתמש בSTP בשביל לעשות UPDATE, ומתי פשוט לפתוח RS לעדכן ולעשות UPDATE.. וכו'?
 

s h i m s h o n

New member
כמה דברים

קודם-כל, איך תבצע את ה-Join? ע"י מכפלה קרטזית?
select tbl1.a, tbl2.b from tbl1,tbl2 where tbl1.id = 1 and tbl2.id = 2​
הסיבה היחידה שאני יכול לראות, לביצוע JOIN, היא אם עלות ה-Network traffic היא גבוהה. מאידך, ישנן הרבה סיבות טובות לפיצול לשני סלקטים - יותר קריא, קל לתחזוקה, קל להוסיף/לשנות אח"כ, הצלחת שאילתא אחת לא תלויה בשאילתא השניה. לדוגמא, שים לב שבשאילתא שכתבתי, אם בטבלה אחת לא יהיה מידע, אז לא תחזור אף רשומה, גם עבור הטבלה השניה. אולי התכוונת ל-UNION? בברכה, ש.
 

rotemNO1

New member
התכוונתי לסוג כזה

SELECT * FROM TBL1 INNER JOIN TBL2 ON TBL1.ID=TBL2.ID WHERE ID=1​
במקרים שאני לא בטוחה שיש מידע באחד מהטבלאות אני משתמשת LEFT JOIN וכו'... יש הבדל בין זה למה שאתה עשית..? השאלה שלי הייתה בעיקר על יעילות שאילתא ומהירות ביצוע.. כי חשוב לי שהדף שאני משתמשת בSELECT יעלה כמה שיותר מהר (וזה לא השאילתות היחידות שמופיעות בו..)
 

s h i m s h o n

New member
כמה שאלות

למעשה, בצד של ה-DB, שיקולי הביצועים כאן הם שיקולי ביצועים רגילים. כלומר, הנושא של אינדקסים, כמות הרשומות בטבלה, הפיזור של ID (האם הוא ייחודי?) וכו'. מהצד של האפליקציה, ע"פ רוב ניתן לשלוח ב-Bulk (או בעזרת SP) מס' שאילתות יחד ולקבל ב"מכה" אחת את התוצאות שלהן. איך מבצעים זאת - זו שאלה לפורום אחר, אך אני בטוח שיש כאן חברים שהתנסו בכך. מבחינת קידוד פרופר, אין הצדקה לקבץ שאילתות יחד כשרוצים להביא מידע בלתי-תלוי ממספר טבלאות. בברכה, ש.
 
דוקא עושה רושם, שמדובר על מידע

שכן תלוי ממספר טבלאות. במקרה כזה, בהחלט הייתי עובד עם join.
 
למעלה