How do nested loop, hash, and merge joins work? Databases for Developers Performance #7

Поделиться
HTML-код
  • Опубликовано: 1 янв 2025

Комментарии • 206

  • @PeterBogaert-fz1kn
    @PeterBogaert-fz1kn 10 месяцев назад +10

    I'm an Oracle DBA for 30 years and your explanation is the best I ever seen !!! Congrats

    • @TheMagicofSQL
      @TheMagicofSQL  10 месяцев назад +1

      You're welcome Peter - glad you found this useful!

  • @khalidbadawi8216
    @khalidbadawi8216 Год назад +27

    bro, not exaggerating, your way of teaching is legendary, keep making videos on different topics and ur views will reach the top.

  • @Variable.Constant.
    @Variable.Constant. 4 года назад +96

    Hi, I am really surprised you got so less views. You have explained something I took years to understand. Subscribed.

    • @TheMagicofSQL
      @TheMagicofSQL  4 года назад +6

      Thanks Kapil, glad this helped you understand :)

    • @rahulbansal3811
      @rahulbansal3811 3 года назад +7

      Exactly your videos are highly underrated on youtube

    • @raobuctdeerf
      @raobuctdeerf 2 года назад +1

      Very much agree your explanation was spot on ...and solid too..

  • @VicUXR
    @VicUXR 2 года назад +16

    I feel so lucky to have come across this video on my second day of SQL home study. Looks like I saved myself years of mystification/confusion!

  • @dalvandi
    @dalvandi 2 года назад +4

    Great explanation! A word of note for those who were also not understanding (like me) due to the suit system ; The suit strength goes clubs < diamonds < hearts < spades
    I just found out that apparently that there's two systems of suit strength :
    clubs < diamonds < hearts < spades (alphabetical)
    and
    diamonds < clubs < hearts < spades (alternating)
    I know the latter. I didn't know the alphabetical order even existed.

    • @TheMagicofSQL
      @TheMagicofSQL  2 года назад

      I was just ordering alphabetically for this video! Thanks for digging out the other suit sorting method

  • @galeop
    @galeop Год назад +1

    Great vidéo!
    My sum up:
    Definitions:
    [from other source]The Optimiser will decide which table will be the _inner_ or _outer_ table.
    - The outer table is the source of rows to match against the inner table. It is usually read from disk.
    - The inner table is the table that is probed for matches. It is usually held in memory, is usually the source table for hashing, and if possible, is the smallest table of the two being joined.
    Nested Loops:
    TL;DR : good if you only have a small subset of rows to join from the outer table, AND you have an index on the inner table.
    For each row in the outer table, it will look for all the row in the inner table. Without any index, you get a complexity of o(number of rows in Table1 * number of rows in Table2).
    This is very inefficient, unless you only have a small number of rows from the outer table to join (or a small subset of the outer table to join), AND you have an index on the joining column of the inner table. Thanks to the index of the inner table, the nested loop (that looks for the matching row in the inner table) will be fast. And as there are few rows triggering the nested loop, the whole operation will be pretty Note that if you also have an index for the outer table, finding the subset of rows that we want to join is even faster; but this is optional.
    If the number of rows to join from the outer table is small, but not that small, the Optimiser may have a hard time deciding whether to use a Nested Loop or Hash Join, so having up to date statistics is important.
    Merge Join:
    TL;DR: good even if you have lots of rows to join, but requires an index on the outer table to be efficient.
    Both tables are first sorted by the joining column (¿sorted in memory?), and then joined. The sorting allows to read the the inner table bit by bit : the RDMS reeds the 1st row from the sorted outer table, and then looks in the inner table for matching rows. When the next row no longer matches, it means that there won’t be any other matching row, as the table is sorted. This allows to only have to read each table once. Merge joins are thus efficient even if many rows have to be joined. But the sorting operation is expensive… Sorting both tables means a complexity roughly of o(#Table1 * Log #Table1 + #Table2 * Log #Table2)
    However, if you have an index for the outer table (on the joining column), then only the inner table will have to be sorted. Indeed, indexes are sorted, so the RDBMS will use the outer table index to read it in a sorted manner. Sadly, even if you have an index for the inner table, Oracle DB will still have to sort it [10:28].
    Hash Join:
    TL;DR: works only for equality joins (e.g. not for “joincolumTable1 > joincolumnTable2”). Good for large amount of rows to join. It is the most efficient most of the time. Complexity is o(number of rows in Table1 + number of rows in Table2)
    A hash table of table1 is computed in memory, and then the value of each of table2 is hashed, and an equality of hash value is looked for in the hash table.

  • @AndrewCoffman-jq9ld
    @AndrewCoffman-jq9ld 7 месяцев назад

    Been doing MSSQL for 20 years and this was by far the best explanation of these joins. Thanks!

  • @bobfar
    @bobfar 8 месяцев назад

    I am incredibly grateful to Chris for their invaluable tutorials on hash join, merge join, and nested loop. These concepts always seemed daunting to me when I encountered them in execution plans, but their clear and concise explanations have helped me gain a much deeper understanding. Their expertise and dedication to educating others are truly commendable. A big thank you for demystifying these complex topics and making them accessible to all!

  • @nishanksoni7120
    @nishanksoni7120 3 месяца назад +2

    1.Nested Join - nested for loop - O(N * N)
    - easiest to implement
    - time consuming for large dataset
    - better with either small datasets or index on join attributes
    2.Merge Join - sort them first and compare - O(NlogN) + O(NlogN)
    - Efficient for large datasets
    - pre-join preparation required (sorting)
    - scanning of relation happens once while joining
    - can leverage indexes if available to make it faster
    3.Hash Join - using hashing - not good for range queries
    - creating a hashtable for the query you are searching ( user_id is the key)
    - used for equi joins
    - efficient for large datasets
    - requires additional memory
    - pre join preparation required -> hash table construction
    - Hash function should distribute data evenly
    SQL Engine : Take a look at data , look statistics across all table using cardinality

    • @TheMagicofSQL
      @TheMagicofSQL  3 месяца назад

      Nice summary. Though - at least in Oracle Database - hash join is worse than "not good" for range queries. The optimizer won't use it at all!

  • @jessiebessie3616
    @jessiebessie3616 3 года назад +13

    Woah this is good stuff. Easily one of the best explaination I seen in a long time. Clear and Concise. The anim also nicely done. Totally can visualise and relate in split seconds. Kudos!

    • @TheMagicofSQL
      @TheMagicofSQL  3 года назад

      You're welcome, glad you found this useful :)

  • @danishhussain8029
    @danishhussain8029 2 года назад +1

    This is a core question of DBA Interviews. Very well explained. Heartiest thanks Sir

    • @TheMagicofSQL
      @TheMagicofSQL  2 года назад

      You're welcome; glad this helps!

    • @sandhu01
      @sandhu01 3 месяца назад

      Although it should technically be a developer's question :)

  • @mohaktrivedi9591
    @mohaktrivedi9591 2 года назад +4

    Thank you very much! This is hands-down the easiest and most concise explanations I've seen!

  • @snaidu70
    @snaidu70 3 года назад +8

    This is an amazing level of detail. I'm so glad I found your channel. It is priceless. Thank you so much for sharing all this knowledge with us.

    • @TheMagicofSQL
      @TheMagicofSQL  3 года назад

      You're welcome, great to hear you find this useful :)

  • @chungusmcjaxx5799
    @chungusmcjaxx5799 Месяц назад

    Thanks. Explained visually nested loops in 90 seconds. Appreciate your method with cards. Thank you.

    • @TheMagicofSQL
      @TheMagicofSQL  Месяц назад

      You're welcome; glad you appreciate it!

  • @abruenin236
    @abruenin236 2 года назад +1

    Probalby the best explanation on this I have ever seen

  • @grzekozak
    @grzekozak 3 года назад

    How you can explain complex matter and in the entertaining way ?! Congratulations ! You nailed it !

    • @TheMagicofSQL
      @TheMagicofSQL  3 года назад

      You're welcome, glad you found these useful and enjoyable :)

  • @vijayhul
    @vijayhul 4 года назад +3

    This video deserves more views

    • @TheMagicofSQL
      @TheMagicofSQL  4 года назад +1

      Thanks, glad you found it useful :)

  • @gururaoprabhakar5677
    @gururaoprabhakar5677 4 года назад

    Excellent Explanation. I don't think even those who wrote the optimizer's algorithms could have explained it this lucid and simple.

    • @TheMagicofSQL
      @TheMagicofSQL  4 года назад

      Thanks! Glad you found this informative :)

  • @guptaashok121
    @guptaashok121 2 года назад +3

    this is super good. just for my understanding, you said when we just have few card (5) from outer deck to match nested loop becomes faster as it can start matching from the first card however, hash join still needs to create hash table for all 52 cards from outer table. why should it create hash table for 52 instead of 5, assuming the filter is already applied and it knows those 5 rows already.

    • @TheMagicofSQL
      @TheMagicofSQL  2 года назад +4

      Thanks
      Perhaps I wasn't clear on this - I was thinking of a Top-N, "get the first 5 rows then stop" query. Instead of a where clause that only matches 5 rows, the result set (could) be bigger. But we'll stop as soon as we've returned 5 rows.
      Because nested loops join rows immediately, it can stop as soon as it reads 5 rows from the outer table (assuming they all join to a row in the inner table). A hash join always builds the hash table on the whole outer table first.
      If the where clause identifies 5 rows from the outer table, you're right the hash join will only build on these 5 rows.

    • @iamcerba
      @iamcerba 2 года назад +1

      It was unclear for me too, thanks for the explanation.

  • @BharathMarrivada
    @BharathMarrivada 3 года назад +1

    The best explanation that I have ever seen.

  • @oah8465
    @oah8465 3 года назад +1

    This channel is pure gold. Thx a ton.

  • @ajay-jm1ni
    @ajay-jm1ni Год назад +1

    I got addicted to see deeper and deeper in SQL now Thanks for the such nice explanation

  • @mukeshbashal5865
    @mukeshbashal5865 2 года назад +1

    i always confused in this, But after your card explaction i understand way u explained. Subscribed

  • @jamsher731
    @jamsher731 2 года назад +1

    Excellent explaination Chris Saxon

  • @bodoziada6242
    @bodoziada6242 Год назад

    that was super easy to understand such complicated concepts and with good English for all people. Thank you

  • @88spaces
    @88spaces 4 года назад +1

    Excellent explanation of join strategies. And your use of decks of cards helps to visualize each strategy in your head for a better understanding of each one. Thank you.

    • @TheMagicofSQL
      @TheMagicofSQL  4 года назад

      You're welcome, glad you found this useful :)

  • @GSCVirus
    @GSCVirus Год назад +1

    Great explanation and the example with the deck of cards is brilliant

  • @Somosphere
    @Somosphere 7 месяцев назад

    First time came across such good explanation of these 3 kind of joins. Kudos !!!

  • @zelalembayissa4181
    @zelalembayissa4181 2 года назад +2

    This is amazing how you explain and make it simple. Thank you very much!

  • @arunsundar3739
    @arunsundar3739 11 месяцев назад

    this video helps me to understand the joining strategies as well helps to make sense & reason out the usage of some of the complex concepts used in Apache Spark, fortunate to find this video, fantastic explanation, very easy to understand the concepts that felt really confusing, thank you very much :)

    • @TheMagicofSQL
      @TheMagicofSQL  11 месяцев назад

      You're welcome! Glad you found this useful

  • @robertczaja176
    @robertczaja176 7 месяцев назад

    Perfect video! You can explain things that everyone can understand it!

  • @BettForester
    @BettForester Год назад +1

    Thank you for a clear explanation! But I am still wondering why the merge sort needs to start on the previous value if we know it was already joined with the last value from the outer deck. Is there something I have missed? Thanks :)

    • @TheMagicofSQL
      @TheMagicofSQL  Год назад

      There could be many rows with the same value. Going back to the previous value is simple way to ensure you always capture them all. It also works for greater/less than comparisons - if the join is C1 > C2 then you'll be on the last row/value in the inner deck after the first row from the outer. But likely need to revisit most of the rows in the inner deck when you go to the second in the outer.

  • @payalbhatia5244
    @payalbhatia5244 Год назад

    This is really magic , I could understand all of it with an engaging interest. Thanks for sharing.

  • @kavindashehanrajapakshe2890
    @kavindashehanrajapakshe2890 Год назад +1

    It's truely magical. Thank you

  • @Speak12truth
    @Speak12truth 2 года назад

    I don't think anyone can explain better than this.

  • @mustafakalayciDBA
    @mustafakalayciDBA 4 года назад +2

    This might be the first comment that I have ever make in youtube :) I am already familiar to join types but watching this was quite nice. you explained it so simple and I love it Chris 👍👍👍. I would like to add this video to my blog also if it is okay for you. Nice moustache by the way :)

  • @strokeracer
    @strokeracer Год назад +1

    Such a good video!! Finally making Joins make sense for me!

  • @veeramani8478
    @veeramani8478 2 года назад

    this is freaking awesome i learnt something in depth one of the best channel i have seen so far
    i think using hints we can command the optimizer we want this join type while doing certain query using pinned explain plan

    • @TheMagicofSQL
      @TheMagicofSQL  2 года назад +1

      Thanks!
      You have to be careful using hints. To ensure the optimizer picks a particular plan, typically you need LOTS of hints to ensure it does this. When using Oracle Database we recommend you use SQL Plan Management (SQL profiles & baselines) to manage plans instead.

  • @israaezzat2353
    @israaezzat2353 11 месяцев назад

    your explanation is beyond amazing bravo

    • @TheMagicofSQL
      @TheMagicofSQL  11 месяцев назад

      Thanks; glad you found this useful!

  • @SilasSWF
    @SilasSWF Год назад

    This is one the bests videos about this subject. Thank you a lot!!!

  • @kebincui
    @kebincui 12 дней назад

    The most vivid explatnion about joins., easy to understand👍👍 thanks

  • @vialvial1246
    @vialvial1246 7 месяцев назад +1

    Best explanation! Thank you sir!

  • @AndrewCoding
    @AndrewCoding Год назад

    Thank you so much. You make my day. Best explanation ever.

  • @ArthurMontgomery-d2p
    @ArthurMontgomery-d2p 3 месяца назад

    Great video. Thanks.
    But I didn't understand the reason why the example of joining only five cards in the outer deck shows the disadvantage of hash join (from 8:17 to 8:25). I mean, why can't we simply apply the hash function to those five values? That only costs five operations to construct the hash memory structure?

    • @TheMagicofSQL
      @TheMagicofSQL  3 месяца назад

      How do you know what the top five values are before doing the join?
      If you want to (inner) join t1 to t2 and get the first five joined rows there's no general way to pick five from t1 that will join to t2. The values you pick from t1 may have no match in t2.
      Using a hash, you have to read all the rows from t1. Then join to t2, stopping as soon as you have five rows in the results.

    • @ArthurMontgomery-d2p
      @ArthurMontgomery-d2p 3 месяца назад

      @@TheMagicofSQL Thanks for the clarification! I took the five cards as already known.😅

  • @nikhilv199138
    @nikhilv199138 3 года назад

    very informative, easily and affectively explains the three join strategies

    • @TheMagicofSQL
      @TheMagicofSQL  3 года назад +1

      Great, glad you found this informative :)

  • @sdef719
    @sdef719 Год назад +1

    Absolutely Loved the way you explained. More power to you. Subscribed. :)

  • @dbajubin
    @dbajubin 2 года назад

    Fantastic explanation. You made it so easy to understand . Thanks

  • @datawitharyan
    @datawitharyan 9 месяцев назад +1

    Thanks bro , Excellent Explanation

  • @tasty4644
    @tasty4644 8 месяцев назад +1

    excellent video

  • @sandhu01
    @sandhu01 3 месяца назад

    Very well put 👏
    @6:20 - 52*log52 equals 296.4 because the base is 2 not 10.

    • @TheMagicofSQL
      @TheMagicofSQL  3 месяца назад +1

      52 * ln 52 ~ 205 isn't it? :)
      In any case, the exact numbers don't matter too much here - they will vary depending on the algorithm used. It's more the relative size of operations needed for each join type.

    • @sandhu01
      @sandhu01 3 месяца назад +1

      @@TheMagicofSQL thanks for the reply!
      Understood! That's why appreciation was in first place :)

  • @bisratgezahgne914
    @bisratgezahgne914 3 года назад

    Wow, Easy to understand with a detailed explanation. Thank you

  • @FrankyWeber
    @FrankyWeber 4 года назад +1

    Very nice Chris. I’ve watched some other video in the past from Connor, but this one is much more elaborated. I was wondering if you could explain in one video of this series about bloom filters. Thank you again for doing this. Excellent work.

    • @TheMagicofSQL
      @TheMagicofSQL  4 года назад +1

      Thanks Franky! I've added bloom filters to my list of things to create videos about ;)

  • @Noone-bb5qh
    @Noone-bb5qh 8 месяцев назад

    Thank you so much for this video. It really helped me for my interview.

    • @TheMagicofSQL
      @TheMagicofSQL  8 месяцев назад

      You're welcome; glad this helped you

  • @MuhammadUmar-dx7wh
    @MuhammadUmar-dx7wh 2 года назад +1

    Very Good explanation

  • @Maen963
    @Maen963 3 года назад

    awesome, great and terrefic explanation. so underrated !

  • @amanpandey4907
    @amanpandey4907 3 года назад +1

    Finest video on this topic. How is it possible that it was hidden for so long? Just a suggestion, I think you should include NESTED Loops, Merge join, Hash join in the description so more people searching on youtube will come across this. include more hashtags and all. Thanks for the video, if possible please explain REGEX.

    • @TheMagicofSQL
      @TheMagicofSQL  3 года назад

      Thanks - these terms are already in the description though; what exactly are you suggesting I do differently?
      REGEX is a big topic! Maybe I'll cover it one day ;)

    • @amanpandey4907
      @amanpandey4907 3 года назад

      @@TheMagicofSQL sry I wrote description, I meant video title.

  • @ddukbbok
    @ddukbbok 2 года назад +1

    Perfect explanation👏🏻

  • @TheAbbassss
    @TheAbbassss 10 месяцев назад

    very simple explaining..good work bro

  • @rahil8304
    @rahil8304 3 года назад

    Absolutely incredible Big Cheer to this guy

  • @Ytakies
    @Ytakies Год назад +1

    This is GOLD ❤❤❤❤

  • @pranavsharma7479
    @pranavsharma7479 3 года назад

    this video shd be viral among all advance database students

  • @junaidahmed3981
    @junaidahmed3981 2 года назад

    such clear explanation, thank you sir

  • @mayfly0
    @mayfly0 3 года назад

    such a pleasure to watch, thanks for the video

    • @TheMagicofSQL
      @TheMagicofSQL  3 года назад

      You're welcome, glad you enjoyed it!

  • @JKhalaf
    @JKhalaf 4 года назад +2

    This was really good, thank you.

  • @kumarparimi676
    @kumarparimi676 3 года назад

    Best explanation for joins ever 👍👍

  • @fabkury
    @fabkury 2 года назад

    Your content (and presentation) is excellent, thank you for your work!

    • @TheMagicofSQL
      @TheMagicofSQL  2 года назад

      You're welcome; glad you found this useful

  • @indudwivedi4068
    @indudwivedi4068 2 года назад +1

    Nicely explained!

  • @chandnigupta4933
    @chandnigupta4933 2 года назад

    Really wonderful!
    Very well explained !
    You have got less likes .. your video deserves lot of likes and appreciation as Its really outstanding👌🏼

    • @TheMagicofSQL
      @TheMagicofSQL  2 года назад

      You're welcome, glad you enjoyed this - please share it with anyone you think would benefit!

  • @mohan1958
    @mohan1958 9 месяцев назад

    Thanks very much for the detailed study.

  • @YusanTRusli
    @YusanTRusli 4 года назад +1

    Great explanation! Thank You

  • @josedial1
    @josedial1 2 года назад +1

    Excellent explanation for something that took me years to learn and I even bought some books to try to understand this concepts. Still have questions in my mind like - what is considered a big table ( how many rows - at the end normally the answer is -> It depends). Also how many rows are a few rows to return base on the total numbers of rows in a table. Also explain this with two tables is kind of Ok, now in real life RL when there are 3,4, ... tables - I know at the end is always join two tables but when the query is complex is very tiring to try to figure out what is the best join between table t1 and t3 and now t1 and t4 etc.. - Any way a Big thank you again.

    • @TheMagicofSQL
      @TheMagicofSQL  2 года назад

      Yeah "big table" doesn't really have a fixed definition!
      Remember that when deciding join order & method it's not the total number of rows in the table that matters. It's how many rows the optimizer expects to fetch from that table.
      In general the optimizer tries to start by joining the two tables that you fetch the fewest rows from. Then adding the tables with more rows & finish by joining the table that returns the most. This is because starting with the smallest data set and adding to it is more efficient than starting with the biggest data set.
      When the optimizer gets the "wrong" join order & method, it's often because the number of rows it estimates is significantly different (an order of magnitude or more) to the actual number it processes.

    • @josedial1
      @josedial1 2 года назад

      @@TheMagicofSQL Wow Chris. I really appreciate that you had take the time to answer my comment. Thanks again.

    • @TheMagicofSQL
      @TheMagicofSQL  2 года назад

      You're welcome!

  • @govindpalariya3173
    @govindpalariya3173 3 года назад

    This is really outstanding session.

  • @AlexYeusiukou
    @AlexYeusiukou Год назад

    Thank you for this clear explanation! Subscribed! One question: if both tables are indexed and we use a Merge Join, you said that it would still sort the second table. Could you elaborate on the reason behind it? Excellent content!

    • @TheMagicofSQL
      @TheMagicofSQL  Год назад

      "It just does!" Sorry, I don't know the exact reason why Oracle Database always sorts the second table. It may be that this changes in the future.

  • @nguyennguyenkhoi7111
    @nguyennguyenkhoi7111 2 месяца назад

    Thanks bro,
    It's really nice and clear explaination. However, I still have 1 question. Why do we need to run "Hash Function" in the whole table? Why don't we hash 5 cards and do the JOIN?

    • @TheMagicofSQL
      @TheMagicofSQL  2 месяца назад +1

      See my response to ArthurMontgomery-d2p - how do you know which 5 rows to pick from the first table?

  • @Артем-х7п6с
    @Артем-х7п6с 29 дней назад

    8:15 I don't understand this case. If we need to join only five cards to other deck then why hash join have got to go through every single card in first deck?? Is it not equivalent to "first table(5 cards except first deck) join second table (second deck)"? Then we just need to make hash table with 5 hashes

  • @todorowael
    @todorowael 2 года назад +1

    Great video, thank you.

  • @sidnayak4395
    @sidnayak4395 3 года назад

    Thanks to yt and you for recommending and giving a beautiful explanation on this topic ❤️ choosing cards was best....was unable to understand from theory session from various sources

  • @satyendrakumar6667
    @satyendrakumar6667 3 года назад

    Awesome way of explaining the joins 👍.

  • @abdullahyahya2471
    @abdullahyahya2471 2 года назад

    Awesome Explanation.
    I said "Yaaar Kamaaal" when watching this video.
    Which mean " Dudeee, Terriffic"

  • @likethebeer
    @likethebeer 2 года назад

    This was a very good explanation. Thanks!

  • @RomanPeralta
    @RomanPeralta 3 года назад

    Great explanation! Thank you so much for sharing your knowledge.

  • @chilukanand
    @chilukanand 2 года назад

    wow this is awesome! Thanks for sharing this video.

  • @lawalrasheed_
    @lawalrasheed_ 9 месяцев назад

    Absolute gem!!

  • @guptaashok121
    @guptaashok121 2 года назад

    when we compare the complexity we only compared based on the number of matches however the hash join also needs to build hash table, how can we estimate the cost of that to compare with other two.

  • @ludwigettner3777
    @ludwigettner3777 Год назад +1

    Saved my a**. Really nice video.

  • @aniketurankar9568
    @aniketurankar9568 Год назад

    Great learning, Thank you.

  • @RamaRavuri
    @RamaRavuri Год назад

    nice explanation, but stuck with a doubt, so if we have indexes, won't it be 52 iterations to find match in other table which is lesser than compared to hash join having 104 hits, plz explain.

    • @TheMagicofSQL
      @TheMagicofSQL  Год назад

      You mean for nested loops? To get all the rows in both tables?
      Both nested loops and hash joins will read all the data in both tables. A (covering) index means the nested loop only needs to read the joined row on the inner table. But it also needs to read the index too!
      A hash join full scans both tables, reading each row once.
      The nested loop could full scan the outer table and use an index to lookup in the inner table. So while it reads the same number of rows, it's still more work. This is because it has to read the index too. It's also faster to full scan all the rows rather than read them one-by-one via an index.

  • @ChoothamT
    @ChoothamT 2 года назад

    Thank you for well explained. Excellent!

  • @fandeslyc
    @fandeslyc Год назад

    Hello
    At 8:15, you said that even if we only wanted the join for 5 cards in the first deck, we still had to go through the entire deck
    I don't really understand why
    Can't we just put the 5 cards in the hash table ?

    • @TheMagicofSQL
      @TheMagicofSQL  Год назад +1

      The problem is you don't know *which* five cards from the first deck will join to cards in the second deck - if any! In general there is NOT a one-to-one match like with decks of cards.
      Say the second deck only has aces in; there's no guarantee any of the first five cards you draw from the first deck will be aces. So you have to build the hash table from all the cards in the first deck before you start reading the second deck.
      Does this help?

    • @fandeslyc
      @fandeslyc Год назад

      @@TheMagicofSQL Yes thanks
      I was thinking of a left join, but in that case, the 5 card set would be on the probing side i guess

    • @TheMagicofSQL
      @TheMagicofSQL  Год назад

      It doesn't really matter whether it's an inner or outer; a hash join processes all the rows in the first table before accessing the second

  • @baouevangelia5140
    @baouevangelia5140 Год назад

    I have a question, when you say to sort the values of the two decks, you mean by creating a clustered index on each bucket or am i missing something?

    • @TheMagicofSQL
      @TheMagicofSQL  Год назад

      No - just that the database has to order all the rows from each table on the join columns. Like when you add an ORDER BY to a SELECT statement.

  • @aliadel1723
    @aliadel1723 11 месяцев назад

    I'm lucky to found this treasure.

  • @PradeepKanaparthy
    @PradeepKanaparthy 4 месяца назад

    HI please one more favour. need post on tuning complex query having multiple joins with example to see changes before tuning and after tuning. some of the tuning changes or tips and how they affect the query and make quick access or give response

    • @TheMagicofSQL
      @TheMagicofSQL  4 месяца назад +1

      I recently ran an Ask TOM Office Hours session going through some real world tuning examples - see the recording at ruclips.net/video/ewJamNU6IY0/видео.html

    • @PradeepKanaparthy
      @PradeepKanaparthy 4 месяца назад

      @@TheMagicofSQL Thank you 😊

  • @mehdibouchene3208
    @mehdibouchene3208 Год назад

    this was magic thank you

  • @anuragdhyani1712
    @anuragdhyani1712 3 года назад +1

    Great vid 😀

  • @looneytr
    @looneytr 2 года назад +1

    Great video

  • @rawgyanlearnandinnovate9781
    @rawgyanlearnandinnovate9781 2 года назад +1

    Very nice video 👍

  • @ziadfawzi
    @ziadfawzi Год назад

    Thank you so much.

  • @taniyasaini6830
    @taniyasaini6830 2 года назад

    Awesome video! Love it!!!

  • @siarheikarko4793
    @siarheikarko4793 4 года назад

    Thanks a lot for your awesome videos!

  • @skhochay
    @skhochay 3 года назад

    you are very good teacher !!!!!