1
我有一個功能,執行非常slow.I正在工作的數據庫,我需要遷移數據,我沒有控制權! 理想情況下,我想直接使用視圖,因爲這個函數被視圖調用,但我似乎只能通過調用一個函數來實現。加速我的查詢使用sql server 2008.交叉替代
=== 視圖應該返回無論是在dummytable通過orderNo.If的orderNo有「趣」比平衡paymenttype應該是興趣,如果「稅」應納稅
在現實生活中我將有20萬行和更多,通過使用交叉應用它似乎減慢了很多。
有沒有更好的方式來獲取數據而不是使用CrossApply?
諾迪這裏樣品(數據和數據類型都爲例子semplicity只是虛構的)
CREATE DATABASE DummyDB
GO
use DummyDB
IF object_id(N'DummyTable', 'U') IS NOT NULL
DROP TABLE DummyTable
GO
CREATE TABLE DummyTable
(
Id int,
OrderNo varchar(255),
PaymentType varchar(255),
Credit varchar(255),
Debit varchar(255),
Balance varchar(255)
)
GO
INSERT INTO [dbo].[DummyTable]([Id], [OrderNo], [PaymentType], [Credit], [Debit], [Balance])
SELECT 1, N'200', N'Interest', N'10', N'5', N'5' UNION ALL
SELECT 2, N'201', N'Deposit', N'400', N'30', N'370' UNION ALL
SELECT 3, N'202', N'Tax', N'20', N'10', N'10' UNION ALL
SELECT 4, N'202', N'Tax', N'50', N'10', N'10'
--my sample attempt not performing
use DummyDB
select * from DummyTable
Declare @OrderNo int
set @OrderNo=202
SELECT
Tax=tx.Tax,
Interest=tx1.Interest,
Deposit=tx2.Deposit
FROM DummyTable T1
CROSS APPLY(SELECT
Tax=sum(cast(T2.Balance as money))
FROM DummyTable T2
WHERE [email protected]
AND PaymentType='Tax')as tx
CROSS APPLY(select
Interest=sum(cast(T2.Balance as money))
FROM DummyTable T2
WHERE [email protected]
AND PaymentType='Interest')as tx1
CROSS APPLY(select
Deposit=sum(cast(T2.Balance as money))
FROM DummyTable T2
WHERE [email protected]
AND PaymentType='Deposit')as tx2
WHERE [email protected]
Any Suggestion of using something more efficient than cross apply?
Many thanks