15-10-2017, 07:44
|
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
|
|
חבר מתאריך: 25.10.01
הודעות: 42,775
|
|
ציטוט:
במקור נכתב על ידי DeepSpace
כן, אחרי שהגבתי חשבתי על זה.
|
אף אחד לא מנע ממך להגיב שוב ולהוסיף...
ציטוט:
במקור נכתב על ידי DeepSpace
יותר טיפשיים מלעשות join ולקחת את כל השורות שלא נמצאות בו (שוב, אם זה בכלל אפשרי כפי שציינת)?
|
ובכן, את השאילתא שכתבתי כאן, הרצתי, לפני שכתבתי כאן, באתר שממנו נלקחה השאלה, והתוצאה הייתה זהה, אז אפשרי זה כן.
לגבי היותר טפשי - אני חזיתי במו עיני ב MySQL מריץ תת שאילתא שוב ושוב עבור כל שורה בטבלה המקורית כדי לבדוק האם ערך נמצא בתוכה בשימוש בפסוקית IN. כלומר אתה עושה WHERE על טבלה שגודלה נניח 10,000 שורות שמהם אתה מסנן תוצאות מסויימות לפי תת השאילתא, ותת השאילתא, שמחזירה בסה"כ id-ים, רצה... 10,000 פעם (שבכולן היא מחזירה כמובן את אותה תשובה עם אותו סט של id-ים). הביצועים... "בשמיים". זה נגמר בפתרון מגוחך של הרצת תת השאילתא מהאפליקציה, שמירת התוצאה, ובניית SQL בלי תת שאילתא עם הכנסה סטטית של ה-id-ים ל IN().
למעשה, נדמה שהשאלה נשואת האשכול שלנו מתאימה לקריטריון הזה ובהחלט ייתכן שתת השאילתא תרוץ כמספר השורות שיש בטבלת movies. ייתכן שה JOIN מהיר יותר (שהרי כך כל הרשומות מטבלת rating תיקראנה רק פעם אחת - אני כמובן מניח שיש אינדקס על mov_id)
|