Secret To Optimizing SQL Queries - Understand The SQL Execution Order

Get a Free System Design PDF with 158 pages by subscribing to our weekly newsletter: bytebytego.ck.page/subscribe
Animation tools: Adobe Illustrator and After Effects.
Checkout our bestselling System Design Interview books:
Volume 1: amzn.to/3Ou7gkd
Volume 2: amzn.to/3HqGozy
The digital version of System Design Interview books: bit.ly/3mlDSk9
ABOUT US:
Covering topics and trends in large-scale system design, from the authors of the best-selling System Design Interview series.

Пікірлер: 153

  • @cumbi-mongo
    @cumbi-mongo Жыл бұрын

    Great video! One addition: The "EXPLAIN" command is an invaluable tool for optimizing SQL queries. It provides a detailed execution plan, allowing the developers to understand how the database engine processes a query. By analyzing the execution plan, you can address the performance bottlenecks with proper optimizations, e.g. proper indexes.

  • @Omar-ic3wc

    @Omar-ic3wc

    Жыл бұрын

    Thanks for sharing this.

  • @luis5d6b

    @luis5d6b

    Жыл бұрын

    Thanks a lot for the addition, really good :)

  • @ksm1847

    @ksm1847

    10 ай бұрын

    @cmertayak - I second you. It's an awesome command I use many times at my work to optimise. My go to command to improve queries execution.

  • @zeelthumar

    @zeelthumar

    8 ай бұрын

    Thanks for sharing

  • @DavisTibbz

    @DavisTibbz

    4 ай бұрын

    Oh yes, if you run EXPLAIN in some desktop client like Mysql Workbench, shows you detailed chart diagram of your Query, quite useful

  • @uzair004
    @uzair004 Жыл бұрын

    Opt for indexes with SELECT, WHERE, JOIN clauses. Use full column comparison to get data instead of half or computed comparison (i.e startsWith) Avoid ORDER_BY on large data retreval Use limit of smaller number with pagination for more data.

  • @sampri22

    @sampri22

    2 ай бұрын

    Could you explain how? What if i need large data retrieved with order by. How would i use limit and pagination in this case? Thanks

  • @beebeewijaya1374

    @beebeewijaya1374

    4 күн бұрын

    ​@@sampri22 for data processing and analytics? better way to do this is dump your database data and put into BigQuery or Hadoop, they have better resources for processing a large data

  • @ayazahamed8254
    @ayazahamed82549 ай бұрын

    The way you explained with the animations are Awesome. Great Job. Very Well Explained.

  • @lucyk7292
    @lucyk7292 Жыл бұрын

    Thank you for a fantastic visualization of the SQL queries execution order. That's exactly what I have been missing in the other materials. I really appreciate your style of teaching

  • @AliBensoukehal
    @AliBensoukehal Жыл бұрын

    Simple and to the point explanation. Love it. Thanks 👍

  • @user-yi4cp1uh1f
    @user-yi4cp1uh1f10 ай бұрын

    bro this way of teaching is really really make sense. thanks a lot for these visuals.

  • @user-si5ue8dv7y
    @user-si5ue8dv7y5 ай бұрын

    This is the best explanation I've ever seen. Big thumbs for you!

  • @JohnS-er7jh
    @JohnS-er7jh11 ай бұрын

    One of the best SQL videos I have come across, just the way it is put together and the infographics. If you are learning SQL, you really should understand the mechanics behind optimizing queries, how databases work. Just adding more hardware or VM resources will not fix the issue if your queries are not optimized properly.

  • @rembautimes8808

    @rembautimes8808

    4 ай бұрын

    Very well presented, thanks for explaining SARGAble concept

  • @CyberMew
    @CyberMew Жыл бұрын

    Very good intro. Would like a more detailed explanation on more complex queries.

  • @adicide9070

    @adicide9070

    Жыл бұрын

    they don't do detailed explanations. it's basically "use indexes". don't sort lots of data. well, thanks.

  • @davidlee588

    @davidlee588

    Жыл бұрын

    @@jonbaird9718agreed, KZread is made for juniors

  • @developersharif
    @developersharif Жыл бұрын

    *Explanation level is so beautiful!*

  • @caseyspaulding
    @caseyspaulding Жыл бұрын

    Wow. To the point with knowledge I can use today. Thank you.

  • @JeremyChone
    @JeremyChone Жыл бұрын

    wow, what an awesome introduction to SQL optimization.

  • @abhinav10x
    @abhinav10x2 ай бұрын

    Very profound, please share more on SQL like windows and CTE, your explanation is very approachable.

  • @tallalmoshrif6643
    @tallalmoshrif664311 ай бұрын

    Great video, very informative and well explained bravo!

  • @99aabbccddeeff
    @99aabbccddeeff Жыл бұрын

    Excellent explanation, thanks!

  • @karunakaranr2473
    @karunakaranr24732 ай бұрын

    Thank you for your time and effort to explain any of the subjects. Really like it and more over able to register the concept in mind easily. Thanks again,.

  • @vasiliynet3425
    @vasiliynet3425 Жыл бұрын

    Awesome as usual! Thanks a lot!

  • @jagmanderbazzad8425
    @jagmanderbazzad842510 ай бұрын

    Nice and simple explanation.Thanks

  • @robbybankston4238
    @robbybankston4238 Жыл бұрын

    Love your channel. Your videos are great.

  • @niketu99
    @niketu998 ай бұрын

    Superb video! Simple explanation on query optimisation.

  • @user-it7ur3bc9n
    @user-it7ur3bc9n7 ай бұрын

    Additionally, for the optimizer to "make up" a reasonably good plan (from the various alternatives), it needs to know a bit about the data (value) distribution. This is where STATISTICS / ANALYZE (depends on the DB vendor) come handy. It helps the optimizer do estimates for the various steps (rows, size of data, etc.) of each plan, and figure out which of the different plans is the best candidate to execute. Therefore it is important to collect this information on critical columns (usually join, where clause columns). It is also important to keep this information regularly refreshed so that the optimizer does not make bad decisions based on stale statistics. Very bad things can happen with stale statistics.

  • @twistedace6365
    @twistedace63659 ай бұрын

    thanks, helped clear up some issues I had.

  • @avijeethati5323
    @avijeethati532311 ай бұрын

    Excellent video explaining basic concepts in very short time..❤ Impressive graphic animation, could you please share how the execution plan animation was done

  • @prasasthaslife6270
    @prasasthaslife6270Ай бұрын

    Great video!! Very helpful! Thanku sir!

  • @nixjavi7220
    @nixjavi72203 ай бұрын

    these videos are amazing!!!! thanks!!!

  • @MrSuriyam
    @MrSuriyam3 ай бұрын

    Hi Sir thank you 🙏 for taking the time to explain the SQL. Sorry Iam new and very helpful.

  • @darrenklein6090
    @darrenklein60902 ай бұрын

    Thank you, this was really helpful.

  • @stpaquet
    @stpaquet Жыл бұрын

    Understanding how the DB engine works with indexes is key. you may assume that a WHERE purchase_date >= 2022 AND purchase > 100 would be the same if you have indexes on purchase_date and purchase, but it might be required to have a composite index... Order in the WHERE clause may also be important as it helps reducing the dataset before applying the second condition.

  • @MiningForPies

    @MiningForPies

    8 ай бұрын

    WHERE order has no effect on most sql systems. The only way you can force SQL to filter data first is to use a derived query.

  • @mer2550
    @mer2550 Жыл бұрын

    good things to practice for the interview. Thanks

  • @mikeshin77
    @mikeshin77 Жыл бұрын

    Very good video. It is really helpful.

  • @martingrof1685
    @martingrof16858 ай бұрын

    Amazing. Thank you!

  • @chobemaloso
    @chobemaloso14 күн бұрын

    Thank you for sharing your knowledge

  • @pieter5466
    @pieter5466 Жыл бұрын

    As usual, excellent and to the point video!

  • @viktorsaranchuk2932
    @viktorsaranchuk2932 Жыл бұрын

    Thanks. Good to know! Useful!

  • @Sudharshaunvilla
    @Sudharshaunvilla Жыл бұрын

    Fantastic explanation.

  • @helal.ismail
    @helal.ismail Жыл бұрын

    Very simple and to the point, love the visualization too

  • @user-yq3si3so5n
    @user-yq3si3so5n3 ай бұрын

    Awesome visualization, I've been loving all the short videos on this channel! Clarifying Q. The execution order has SELECT happening after HAVING, so this should mean that the calculated column total_spent doesn't exist at the time the HAVING clause is evaluated?

  • @jamesayento1321
    @jamesayento1321 Жыл бұрын

    Thanks for this! Will there be a transcription soon?

  • @antonboiko788
    @antonboiko78810 ай бұрын

    cool, didn't think it's possible to include all these concepts in 6 min video. One thing, it's great to watch it when you want to summarise already existing knowledge

  • @bilo1897
    @bilo189725 күн бұрын

    Great video!

  • @ThinhLe-eh9re
    @ThinhLe-eh9re10 ай бұрын

    Thanks for your sharing Bro's.

  • @bigbrother1211
    @bigbrother1211 Жыл бұрын

    Thank you so much!

  • @moneycrab
    @moneycrab Жыл бұрын

    I heard it called "predicate pushdown" when you move a condition earlier in the plan

  • @sengs.4838
    @sengs.483811 ай бұрын

    So good explanations

  • @mohan1958
    @mohan19583 ай бұрын

    Great. Thanks for sharing..

  • @yashwanthbedre8220
    @yashwanthbedre8220 Жыл бұрын

    Best explanation ever

  • @antonanton22743
    @antonanton22743 Жыл бұрын

    thanks a lot for your content

  • @naveenverma2951
    @naveenverma29512 ай бұрын

    oh my goodness, this is too good for non IT background jumping ship to see where AI will land. Thx. You are my 3blue1brown for IT

  • @jerichaux9219
    @jerichaux92192 ай бұрын

    You guys are awesome!

  • @DerBarde2012
    @DerBarde20124 ай бұрын

    Your presentation is so pleasant to watch, is it manually key-framed in the video editor or are there tools to do that naturally?

  • @iezioaudi22
    @iezioaudi224 ай бұрын

    muchas gracias!

  • @shmuelsigler2918
    @shmuelsigler2918 Жыл бұрын

    מדהים!

  • @christopherli5828
    @christopherli58284 ай бұрын

    thanks so much!

  • @bhooshan25
    @bhooshan2511 ай бұрын

    good explaination

  • @huywarrior
    @huywarrior11 ай бұрын

    Lord Buddha. I'm looking for an active data flow visualization that can shorten data query response times! A great video, it saved me today. Leaving with 1 subscription as a fan! 🔍⚡

  • @anirudh7463
    @anirudh7463 Жыл бұрын

    This stuff is gold. Thank you for making this available for free. Really appreciate it!

  • @anitacusick7658

    @anitacusick7658

    8 ай бұрын

    1:26

  • @zackwong1000
    @zackwong1000 Жыл бұрын

    You should select from the orders table then join the customers since your where clause is a column in orders table! Your SQL is joining on unnecessary rows from orders & customers!

  • @crossedpolars
    @crossedpolars10 ай бұрын

    Very good video

  • @gliderguld
    @gliderguld9 ай бұрын

    Well explained. However I do miss 1) the generation of more query-plans and selection amongs them (cost estimations) and (as an element herein) 2) different table access tactics (sequential scan, index access or index only).

  • @d4devotion
    @d4devotion Жыл бұрын

    This is pretty cool.

  • @gabrielb.962
    @gabrielb.962 Жыл бұрын

    Index usage tip: When using params in your query (e.g., select .... where year > ?), databases may not utilize an index if it is unbalanced. For instance, if you have approximately 1 million rows with year = 2022 and only 1000 rows with year = 2023, the database cannot predict whether the parameter will be useful for filtering. To resolve this issue, pass the value directly in the query itself, allowing the execution plan to determine if the index is suitable for the intended purpose.

  • @stpaquet

    @stpaquet

    Жыл бұрын

    As I wrote in my comment, good understanding on how you db engine works is key. And they are all different. So never assume that a good query on a MySQL will be a good query on Postgres, Oracle or any SQL engine.

  • @maf_aka

    @maf_aka

    Жыл бұрын

    this opens the gate for SQL injection, don't do this

  • @maksymbaranovskyi8362

    @maksymbaranovskyi8362

    Жыл бұрын

    @@maf_aka I think the idea was not to use prepared statements *where you don't need them.* E.g. if you already have validation in place that ensures your received value is enum (number, null, etc.) - you can be sure no SQL injection is possible there - so no need to use prepared statements *there.*

  • @lethern2

    @lethern2

    11 ай бұрын

    Ok, but then you get a different query plan for each (different parameter / set of parameters) query

  • @stpaquet

    @stpaquet

    11 ай бұрын

    @@lethern2 yep. but that's why you need to understand how your db engine works

  • @Moali11
    @Moali118 ай бұрын

    Can you make a video explaining the difference between system design and software architecture?

  • @guocity
    @guocity Жыл бұрын

    很不错

  • @mwaikul
    @mwaikul Жыл бұрын

    What tool do you use to generate your animations?

  • @sriteja2510
    @sriteja251011 ай бұрын

    Hi The actual plan should be derived from the explain and explain analyze right instead from the query?

  • @ronenTheBarbarian
    @ronenTheBarbarian Жыл бұрын

    Would building a cte table and then running a non-sargable query on it, should also be avoided?

  • @NiamorH
    @NiamorH Жыл бұрын

    Nice bird's-eye view introduction. It is not clear how to 'use appropriate indexes' to optimize for sorting, and how to implement pagination. Especially in your example where the sort order is made on an aggregate.

  • @freindimania11
    @freindimania11 Жыл бұрын

    order_date is mentioned as indexed - is that implicit or explicitly defined?

  • @MPIPolitics
    @MPIPolitics Жыл бұрын

    my app didnt reached 40 queries per second yet but i will implement that just in case my app will be next amazon :D

  • @apexyu164
    @apexyu164 Жыл бұрын

    so in the above example, which place we should index ?

  • @blackisblack22
    @blackisblack22 Жыл бұрын

    I have always thought that the Sql structure is poorly designed by not starting from FROM and placing the reference at the end of the statement, for example in a SELECT it should go just before ORDER BY, in an UPDATE the SET after WHERE, etc. Somehow they wanted to remedy the problem by introducing the WITH clause but I'm sure many regret that whoever designed the language should have worked a little harder at the time.

  • @Piyush_Kumbhare
    @Piyush_KumbhareКүн бұрын

    why don't you make a tutorial on SQL. I would like to watch it and I think it'll help a lot of people. By the way thank you very much for this amazing explanation.

  • @resistentemente
    @resistentemente10 ай бұрын

    What program is this used in the presentation?

  • @seraphfull
    @seraphfull Жыл бұрын

    thank you for your video, i working on IT with 10 years experience, but I never know the order between JOIN and WHERE, utill I watch this video

  • @sahandjavid8755
    @sahandjavid87555 ай бұрын

    Question: at the end of the video you mentioned do not sort the whole data and use pagination for optimizing ORDER BY and LIMIT. Those are the things I use for pagination! What do you mean by that? The other thing is from your video LIMIT happens after ORDER BY. How come it can help when ORDER BY has already happened?! Btw great videos and content, thank you for these

  • @fishinawaterbottle
    @fishinawaterbottle Жыл бұрын

    I feel like this is a bit misleading because sometimes where and select influence the first stage. As you said, when there’s a covering index, the database won’t read the entire table. So the select and where influence what is read from the source. Order and limit can also come it at the source as well if the index can be used with the order. You refer to this when you talk about “sorting the whole table”. CTEs and sub queries are not mentioned but that’s okay i guess.

  • @sevsxes
    @sevsxes Жыл бұрын

    Will it be even faster if we always order where first and join after?

  • @theawesomeharris
    @theawesomeharris11 ай бұрын

    hi, can you enable captions/subtitle for this video? thank you!

  • @wjrasmussen666
    @wjrasmussen666 Жыл бұрын

    Will this work with MySQL as well?

  • @GabrielGasp
    @GabrielGasp9 ай бұрын

    I always thought that the SELECT happened before HAVING, considering that we can use SELECT aliases in the HAVING filter.

  • @zixuanzhao6043
    @zixuanzhao6043Ай бұрын

    This query actually does not need to join customers table since all the fields are present in the orders table already. (unless there are invalid / dirty customer_id data in the orders table and you want to filter them out)

  • @KuopassaTv
    @KuopassaTv Жыл бұрын

    Ambiguous query

  • @Mr.zafar_siddiqui
    @Mr.zafar_siddiqui11 ай бұрын

    Can you/anyone please explain execution of case when and window function with group by

  • @AbhishekVaid
    @AbhishekVaid9 ай бұрын

    Something doesn't add well here. If you notice HAVING clause refers to 'total_spent' which is defined in SELECT, so dependency wise HAVING should be after SELECT and not before it.

  • @user-ff3gn4re4g
    @user-ff3gn4re4g4 ай бұрын

    is there a way to contact you? I have some specific questions on indexes?

  • @vikrantgaikwad5529
    @vikrantgaikwad5529 Жыл бұрын

    I think Order by is evaluated before select as order by might change selected rows...is it correct?

  • @michelvandermeiren8661

    @michelvandermeiren8661

    Жыл бұрын

    Yes this vid is full of mistakes

  • @MarredNDisenchanted
    @MarredNDisenchanted Жыл бұрын

    Having uses total_spent from the SELECT, so how come HAVING is executed before the SELECT?

  • @urgorka

    @urgorka

    4 ай бұрын

    I'd say so too. This is error. First SELECT part is evaluated, then - HAVING part.

  • @amrithpurandhar9882
    @amrithpurandhar98828 ай бұрын

    Can anyone help me when does the function count or sum will be executed will it be after limit ?

  • @mahmudulmohtasim7612
    @mahmudulmohtasim7612 Жыл бұрын

    In this example the 'total_spent' alias is already in use in the HAVING clause without defining. How is that possible?

  • @tianyuhu349

    @tianyuhu349

    11 ай бұрын

    yes, I have the same question, it doesnt make sense...

  • @some1rational
    @some1rational Жыл бұрын

    Is that a typo in the first select clause, total spent should be total_spent?

  • @tianyuhu349

    @tianyuhu349

    11 ай бұрын

    yes, i think so, and I have another question, 'Having' uses total_spent from the SELECT, so how come HAVING is executed before the SELECT? Doesnt make sense...

  • @ghaidam9749
    @ghaidam97497 ай бұрын

    can someone explain to me what's mutant query plans with a real life example?

  • @Matthew8473
    @Matthew84734 ай бұрын

    This is top-notch in every aspect. I read a book with similar content, and it was top-notch. "Better Sleep Better Life" by William Brook

  • @user-dg9by2ju2y
    @user-dg9by2ju2y Жыл бұрын

    👍

  • @MuhammadFahreza
    @MuhammadFahreza7 ай бұрын

    I still don't understand the difference between first point noted on here 3:19 and second point noted on 3:23. Would you mind to re-explain it ? thank you!

  • @haooooo
    @haooooo Жыл бұрын

    這集沒字幕..

  • @thuynv
    @thuynv Жыл бұрын

    you should have more subtitles

  • @yash1152
    @yash1152 Жыл бұрын

    0:12 _[JOIN comes before WHERE]_ is there any way to make the WHERE clause execute first to narrow the rows required to make the JOIN in the first place?? this is the only reason i still do this using a nested query rather than JOIN

  • @notbalding

    @notbalding

    8 ай бұрын

    a CTE can be benefitial in your use case.

  • @AliBensoukehal
    @AliBensoukehal Жыл бұрын

    What about mongodb ?

  • @andyvoice
    @andyvoice4 ай бұрын

    subtitles not available

  • @pinusong
    @pinusong7 ай бұрын

    Why are there no subtitles? I need subtitles. Thank you very much!