Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у...
-
Upload
fwdays -
Category
Technology
-
view
132 -
download
3
Transcript of Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у...
![Page 1: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/1.jpg)
Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?Денис РезникIntapp, Inc.
![Page 2: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/2.jpg)
Agenda • .Net ORM History which I remember• Simple Queries• Column List• Lazy Load• Data Types• Data Modification• Complex Query• Parameter Sniffing
![Page 3: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/3.jpg)
ORM History which I remember • ADO.NET• Data Sets (not too bad)• LLBL Gen, NHibernate (better than data sets)• LINQ to SQL (Awesome!)• Entity Framework should be even more awesome• Entity Framework is more powerful than L2S• Entity Framework Code First• Entity Framework is no so good, so what?
![Page 4: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/4.jpg)
Simple Query
![Page 5: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/5.jpg)
DEMO: Simple Query
![Page 6: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/6.jpg)
Column List
![Page 7: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/7.jpg)
DEMO: Column List
![Page 8: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/8.jpg)
Lazy Load
![Page 9: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/9.jpg)
Index Seek
…
…
1 .. 1M
1 .. 2K 2K+1 .. 4K 1M-2K .. 1M
1 .. 300 301 .. 800 801 .. 1,5K 1,5K+1 .. 2K
SELECT * FROM UsersWHERE Id = 523
![Page 10: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/10.jpg)
Index Scan
…
…
1 .. 1M
1 .. 2K 2K+1 .. 4K 1M-2K .. 1M
1 .. 300 301 .. 800 801 .. 1,5K 1,5K+1 .. 2K
SELECT * FROM Users
![Page 11: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/11.jpg)
Index Range Scan
…
…
1 .. 1M
1 .. 2K 2K+1 .. 4K 1M-2K .. 1M
1 .. 300 301 .. 800 801 .. 1,5K 1,5K+1 .. 2K
SELECT * FROM UsersWHERE Id BETWEEN 700 AND 1700
![Page 12: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/12.jpg)
DEMO: Lazy Load
![Page 13: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/13.jpg)
Data Types
![Page 14: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/14.jpg)
DEMO: Data Types
![Page 15: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/15.jpg)
Data Modification
![Page 16: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/16.jpg)
DEMO: Data Modification
![Page 17: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/17.jpg)
Complex Query
![Page 18: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/18.jpg)
DEMO: Complex Query
![Page 19: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/19.jpg)
Parameter Sniffing
![Page 20: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/20.jpg)
Parameter Sniffing - Stored Procedure
EXEC ReportCheckSecurityRequest @UserId = 1
Query Processor
SQL Server Cache
Procedure cachePlan created and cached for the @UserId = 1
Procedure cache
EXEC ReportCheckSecurityRequest @UserId = 22
Query executes using the query plan created for @UserId = 1
![Page 21: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/21.jpg)
Parameter Sniffing – Parametrized Query
SELECT * FROM Clients WHERE Id = @Id
Query Processor
SQL Server Cache
Procedure cachePlan created and cached for the @Id = 1
Procedure cacheQuery executes using the query plan created for @Id = 1
SELECT * FROM Clients WHERE Id = @Idsp_executesql N'SELECT * FROM Clients WHERE Id = @Id', N'@Id int', 1
sp_executesql N'SELECT * FROM Clients WHERE Id = @Id', N'@Id int', 22
![Page 22: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/22.jpg)
Dynamic SQL – Multiple Plans
SELECT * FROM Clients WHERE Id = 1
Query Processor
SQL Server Cache
Procedure cacheNew query plan created and cached. Query executed using newly created plan.
Procedure cache
SELECT * FROM Clients WHERE Id = 22
New query plan again created and cached. Query executed using newly created plan.
SELECT * FROM Clients WHERE Id = 1
Query executed using the query plan, created for the first query.
Procedure cache
![Page 23: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/23.jpg)
DEMO: Parameter Sniffing
![Page 24: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/24.jpg)
Summary • ORM is really a nice thing• But it still requires strong SQL background• Database internals knowledge is a skill that very
nice to have even in the ORM world• Few Advices
• Sometimes check the generated SQL and its query plan• For complex queries consider raw SQL anyway• Consider using Dapper• Invest your time to learn database internals
![Page 25: Денис Резник "Зачем мне знать SQL и Базы Данных, ведь у меня есть ORM?"](https://reader033.fdocument.pub/reader033/viewer/2022052706/58e4a5ca1a28abf5428b6f1f/html5/thumbnails/25.jpg)
Thank You!
@[email protected]://reznik.uneta.com.ua/ https://www.facebook.com/denis.reznik.5https://www.linkedin.com/pub/denis-reznik/3/502/234