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 Жыл бұрын
Thanks for sharing this.
@luis5d6b Жыл бұрын
Thanks a lot for the addition, really good :)
@ksm1847 Жыл бұрын
@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 Жыл бұрын
Thanks for sharing
@DavisTibbz Жыл бұрын
Oh yes, if you run EXPLAIN in some desktop client like Mysql Workbench, shows you detailed chart diagram of your Query, quite useful
@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.
@sampri229 ай бұрын
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
@beebeewijaya13747 ай бұрын
@@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 Жыл бұрын
The way you explained with the animations are Awesome. Great Job. Very Well Explained.
@abhinav10x9 ай бұрын
Very profound, please share more on SQL like windows and CTE, your explanation is very approachable.
@SalmanSayyad-q1h Жыл бұрын
bro this way of teaching is really really make sense. thanks a lot for these visuals.
@vivektarab19592 ай бұрын
0:08 - Start 1:25 - Using Index on Join Columns significantly improve the Join 1:47 - Next Step is use of Where Clause 2:13 - Lets 3:14 - To write Sargable Queries 4:18 - Optimising 5:21 - Remember - Order of Optimization
@JosephDSilva-i6j Жыл бұрын
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.
@TheSocialDrone4 ай бұрын
Thank you, @bytebytego, for breaking down the topic with clear visuals and simple narration!
@deni_.s3 ай бұрын
That's the gap I needed to fill. Couldn't find this info wrapped in the right words and animations as here. Thanks a lot for the content! Hoping to find more relevant videos to expand my knowledge of SQL. Currently struggling with performance of my queries on big datasets (~6mil rows). Not clear how to avoid functions and computations during search and filtering in some cases. Biggest struggle so far
@CyberMew Жыл бұрын
Very good intro. Would like a more detailed explanation on more complex queries.
@adicide9070 Жыл бұрын
they don't do detailed explanations. it's basically "use indexes". don't sort lots of data. well, thanks.
@davidlee588 Жыл бұрын
@@jonbaird9718agreed, KZbin is made for juniors
@Qith6294 ай бұрын
the way you help us visualize this is next level. Thank you!
@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
@連文瑞-o5n Жыл бұрын
This is the best explanation I've ever seen. Big thumbs for you!
@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 Жыл бұрын
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.
@mobiledisco3 ай бұрын
Thank you. SELECT coming practically at the end of the process was a hard thing to get my head around, let alone remember, when I first began with SQL. Still is TBH. The fact it means something more like 'display' than 'go and get' (what we typically mean by 'select' in conversational English) was a hurdle too. Wish I'd come across this video back then.
@MrSuriyam10 ай бұрын
Hi Sir thank you 🙏 for taking the time to explain the SQL. Sorry Iam new and very helpful.
@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 Жыл бұрын
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 Жыл бұрын
this opens the gate for SQL injection, don't do this
@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 Жыл бұрын
Ok, but then you get a different query plan for each (different parameter / set of parameters) query
@stpaquet Жыл бұрын
@@lethern2 yep. but that's why you need to understand how your db engine works
@bonita7990637 ай бұрын
What a Video , Voice , Explanation , Graphics and etc...well done mate
@TravisMcAuley-e1z11 ай бұрын
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?
@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!
@karunakaranr247310 ай бұрын
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,.
@AliBensoukehal Жыл бұрын
Simple and to the point explanation. Love it. Thanks 👍
@DerBarde2012 Жыл бұрын
Your presentation is so pleasant to watch, is it manually key-framed in the video editor or are there tools to do that naturally?
@naveenverma295110 ай бұрын
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
@JeremyChone Жыл бұрын
wow, what an awesome introduction to SQL optimization.
@codingisamazingАй бұрын
Optimizing SQL queries involves improving their performance to reduce execution time and resource usage. Start by *indexing* columns used in *WHERE, JOIN, and ORDER BY* clauses to speed up data retrieval. Avoid using SELECT * and instead fetch only the necessary columns. Use *JOINs* instead of subqueries where possible, as they are often more efficient. Minimize the use of wildcard characters (%) at the start of *LIKE* clauses, as they prevent index usage. Additionally, analyze query execution plans to identify bottlenecks and consider breaking complex queries into smaller, more manageable ones. Regularly update statistics and maintain database health for optimal performance.
@RobinSingh-ms3zt4 ай бұрын
You are awesome at explaining any concept. Thank you so much
@developersharif Жыл бұрын
*Explanation level is so beautiful!*
@niketu99 Жыл бұрын
Superb video! Simple explanation on query optimisation.
@moneycrab Жыл бұрын
I heard it called "predicate pushdown" when you move a condition earlier in the plan
@avijeethati5323 Жыл бұрын
Excellent video explaining basic concepts in very short time..❤ Impressive graphic animation, could you please share how the execution plan animation was done
@antonboiko788 Жыл бұрын
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
@huywarrior Жыл бұрын
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! 🔍⚡
@gokulkumarprasoon5158 Жыл бұрын
00:45 Understanding SQL query execution and optimization techniques 01:30 Understanding SQL execution plans can optimize queries for better performance 02:15 Optimizing SQL queries through index usage 03:00 Writing soluble queries is essential for optimizing database performance. 03:45 Sargable queries improve query performance. 04:30 Understanding the SQL execution order is crucial for query optimization 05:15 Optimizing SQL Queries with Indexes 05:57 Understanding SQL execution order is key Crafted by Merlin AI.
@int11286 ай бұрын
LOL just had an interview and had exact copy of example he is showong and explaing on 😂😂😂 Thanks on this video realy helped.
@KEsh_123_42 ай бұрын
Great explanation in a short video. If orderby comes after the select then it will work on the data already read from disk, right?
@caseyspaulding Жыл бұрын
Wow. To the point with knowledge I can use today. Thank you.
@sahandjavid8755 Жыл бұрын
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
@anirudh7463 Жыл бұрын
This stuff is gold. Thank you for making this available for free. Really appreciate it!
@anitacusick7658 Жыл бұрын
1:26
@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.
@zixuanzhao60439 ай бұрын
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)
@didier.victor11 күн бұрын
Great video, tks for sharing!
@AbhishekVaid Жыл бұрын
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.
@robbybankston4238 Жыл бұрын
Love your channel. Your videos are great.
@gliderguld Жыл бұрын
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).
@nixjavi722011 ай бұрын
these videos are amazing!!!! thanks!!!
@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.
@prasasthaslife62708 ай бұрын
Great video!! Very helpful! Thanku sir!
@souhaildahmeni99615 ай бұрын
Thanks for this kind of explanation
@Piyush_Kumbhare7 ай бұрын
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.
@vasiliynet3425 Жыл бұрын
Awesome as usual! Thanks a lot!
@tallalmoshrif6643 Жыл бұрын
Great video, very informative and well explained bravo!
@jagmanderbazzad8425 Жыл бұрын
Nice and simple explanation.Thanks
@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.
@RZing2 ай бұрын
Thanks for the video but there is one mistake you've make, in HAVING clause you can't use the alias 'total_spend' which was defined in SELECT statement, becuase SELECT was executed after HAVING. THE CORRECT WAY IS : HAVING SUM(order_amount)>=1000
@chobemaloso8 ай бұрын
Thank you for sharing your knowledge
@twistedace6365 Жыл бұрын
thanks, helped clear up some issues I had.
@yashwanthbedre8220 Жыл бұрын
Best explanation ever
@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
@Moali11 Жыл бұрын
Can you make a video explaining the difference between system design and software architecture?
@mikeshin77 Жыл бұрын
Very good video. It is really helpful.
@mer2550 Жыл бұрын
good things to practice for the interview. Thanks
@darrenklein609010 ай бұрын
Thank you, this was really helpful.
@jamesayento1321 Жыл бұрын
Thanks for this! Will there be a transcription soon?
@bilo18978 ай бұрын
Great video!
@99aabbccddeeff Жыл бұрын
Excellent explanation, thanks!
@jerichaux921910 ай бұрын
You guys are awesome!
@HariGajan-yl1en6 ай бұрын
Good insight Thanks!
@ThinhLe-eh9re Жыл бұрын
Thanks for your sharing Bro's.
@enockoloo38144 ай бұрын
really cool - thanks.
@MarredNDisenchanted Жыл бұрын
Having uses total_spent from the SELECT, so how come HAVING is executed before the SELECT?
@urgorka Жыл бұрын
I'd say so too. This is error. First SELECT part is evaluated, then - HAVING part.
@SudharshaunMugundan Жыл бұрын
Fantastic explanation.
@sengs.4838 Жыл бұрын
So good explanations
@MuhammadFahreza Жыл бұрын
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!
@pieter5466 Жыл бұрын
As usual, excellent and to the point video!
@UrielVS4 ай бұрын
Think the key component missed here is that you are utilizing a SELECT aggregate within the HAVING statement. To me that looks like SELECT has to come before HAVING, would it not?
@mohan195810 ай бұрын
Great. Thanks for sharing..
@MintTree117 Жыл бұрын
Amazing. Thank you!
@nguyentanphuc41012 ай бұрын
Avoid using non-saragable condition (func or calc) on index column If has to use func on column, write a computed column or function-based index first.
@chetanjain5097Ай бұрын
Great theoretical video. However, it would have been more helpful to make it more practical by showing practical examples at every step showing a non-optimized (bad) query and optimized (good) query
@vi-2932 Жыл бұрын
Thanks. Good to know! Useful!
@sriteja2510 Жыл бұрын
Hi The actual plan should be derived from the explain and explain analyze right instead from the query?
@GabrielGasp Жыл бұрын
I always thought that the SELECT happened before HAVING, considering that we can use SELECT aliases in the HAVING filter.
@antonanton22743 Жыл бұрын
thanks a lot for your content
@bhooshan25 Жыл бұрын
good explaination
@mahmudulmohtasim7612 Жыл бұрын
In this example the 'total_spent' alias is already in use in the HAVING clause without defining. How is that possible?
@tianyuhu349 Жыл бұрын
yes, I have the same question, it doesnt make sense...
@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
@hyperborean723 ай бұрын
your write in predicate in one case '2023-01-01' and in another '01-01-2008' - which format is correct?
@thati27926 ай бұрын
join before where?? not always!
@bigbrother1211 Жыл бұрын
Thank you so much!
@helal.ismail Жыл бұрын
Very simple and to the point, love the visualization too
@sephyshen2510 Жыл бұрын
very helpful illustration for the SQL execution order. I have watched many videos on your channel. Almost every video leverages beautiful diagrams and dynamic data flows for demonstration purpose. How to build that awesome fantastic diagrams and dynamic data flows? Thank you, sir. @ByteByteGo.
@sephyshen2510 Жыл бұрын
Sorry, just read the brief of the video and know which tools you use. Forget it.
@crossedpolars Жыл бұрын
Very good video
@mePrafull4 ай бұрын
Thanks!
@AndreW-ce4ry6 ай бұрын
This a good information
@r_mclovin17 күн бұрын
you are the GOAT
@some1rational Жыл бұрын
Is that a typo in the first select clause, total spent should be total_spent?
@tianyuhu349 Жыл бұрын
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...