Sql-Server
表值函式 VS 儲存過程
有一個功能:
- 僅返回 1 行
- 只有1個參數
- 在不同的表上有多個連接,每個只返回一個標量值
- 每次登錄 Web 應用程序時只呼叫一次
它目前是用 c# linq-to-sql 編寫的,執行需要 150-300 毫秒。
使用非常簡單的語句在 SQL 中重寫後
SELECT
,執行需要 30ms。現在我想將此選擇包含在數據庫函式中,這樣做的最佳(最快執行)方法是什麼?
- 製作一個視圖,並在每次通話時執行類似的操作
select * from viewXX where id=123
- 做一個儲存過程
- 做一個表值函式
在這種情況下我可以利用任何技巧嗎?
這是查詢的範例
declare @id int=162; select top 1 i.id, i.name, itd.description, (select top 1 case when count(*)>0 then '1' else '0' end from category where category_desc=itd.description) "HasCategory", (select top 1 number from wheels where wheel_item_id=i.id) "WheelCount" from items i left items_desc itd on i.id=itd.itemid where i.id=@id
如果數據不經常更改,請將快速執行的 SELECT 打包為視圖並在其上定義索引。
索引視圖帶有一些限制,這些限制最低限度地限制了未來更改的靈活性。然而,沒有什麼是非常糟糕的。
如果數據經常更改,並且更新對性能至關重要,那麼維護視圖的額外時間可能是一個問題,但與任何其他索引一樣。