儘管我的DBA強烈反對,但我最近使用了Entity Framework作爲項目。所以有一天,他來到我的辦公室抱怨生成的T-SQL到達他的數據庫。來自實體框架的生成T-SQL的性能
舉例來說,當我想根據id選擇一個產品,我寫的是這樣的:
context.Products.FirstOrDefault(p=>p.Id==id);
它轉換爲
SELECT ... FROM (SELECT TOP 1 ... FROM PRODUCTS WHERE [email protected])
於是,他喊的是:「爲什麼上你會寫一個SELECT * FROM(SELECT TOP 1)「
所以我把我的代碼改成了
context.Products.Where(p=>p.Id==id).ToList().FirstOrDefault()
並且這產生更清潔的T-SQL:
SELECT ... FROM PRODUCTS WHERE [email protected]
內查詢和TOP 1 dissappeared。足夠的混亂,我的問題是這樣的:第一個查詢是否真的把SQL Server的開銷?比第二種方法更難解析嗎? Id列上有一個聚集索引。我想一個很好的答案,所以我可以擦在臉上(或礦)
感謝,
Themos
你可以讓他發送給你兩個查詢的執行計劃嗎?那會讓你頭腦發熱。不過,我認爲作爲DBA,識別TSQL查詢中的瓶頸非常重要,並幫助開發人員瞭解如何提高代碼效率。摩擦彼此面臨的是一場不會真正惠及任何人的自我之戰。使用ORM工具有時會導致生成錯誤的SQL。但嚴重寫TSQL代碼具有相同的效果。聽起來像DBA非常注重他的方式,你會爭取一個很難改變的個人觀點。 – Namphibian