私は次のような状況に陥っています。 データベースの1つでTDE暗号化を有効にしたSQL 2008 R2 Enterpriseエディションがあります。暗号化されたデータベースのストアドプロシージャの1つは、テーブル変数(@ t1)を使用しており、テーブルにはほぼ600,000個のレコードが格納されます。次に、このテーブルと暗号化されたデータベース(t2)の別のテーブルとの間の結合を使用するselect文があります。これは約20milの行を持つt2テーブルです。 この結合には永遠に完了します(前回はほぼ4時間かかりました)。テーブル変数の代わりにテンポラリーテーブル(#t3)を使用し、同じ結合を実行すると、結果は瞬時になります。また、私はTDEの暗号化(同じSQL 2008 R2)を持っていない別のサーバーでこれらの2つのテーブル間でジョインを実行すると、結合は数秒で終了します 誰も同じような問題がTDEを使用してテーブル変数と暗号化されたデータベースに遭遇しましたか? これは私がデータベースを暗号化する方法である:TDEを有効にしたSQL 2008 R2サーバーでのテーブルの可変パフォーマンス
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'AASFA234234234as234#234#$##$'
CREATE CERTIFICATE SQLCertificate
WITH SUBJECT = 'SQL Certificate',
EXPIRY_DATE = '10/31/2020';
USE DBTest
go
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE SQLCertificate;
ALTER DATABASE DBTest
SET ENCRYPTION ON
And this is the script that I used where _rptHousehold is a table that has 18mil records. The script never gets to the PRINT '3 ' + CONVERT(VARCHAR,GETDATE(),121), hangs on the select count(*) from @tt
PRINT '1 ' + CONVERT(VARCHAR,GETDATE(),121)
IF object_id('tempdb..#tt') IS NOT NULL
DROP TABLE #tt
declare @tt table
( [id] int IDENTITY(1,1),
TableID DECIMAL(11,0),
AdvisorID INT,
idBuild INT,
Tablename sysname,
tCreatedate datetime,
ColumnName varchar(100),
Column_ID int,
qtyValue decimal(25,9),
tModifiedDate datetime
)
INSERT INTO @tt
(TableID , AdvisorID , idBuild,Tablename, tCreatedate,ColumnName, Column_ID,qtyValue)
select TOP 600000
t.object_ID
,AdvisorID
,1635
,t.NAME
,t.Create_date
,c.Name
,c.object_ID
,CAST(RAND()* 100000 AS DECIMAL(25,9))
FROM sys.tables t CROSS JOIN sys.columns c
CROSS JOIN (SELECT DISTINCT idAdvisor AS AdvisorID FROM dbo._rptHousehold WHERE idBuild = 1635) ac
PRINT '2 ' + CONVERT(VARCHAR,GETDATE(),121)
SELECT COUNT(*) FROM @tt
PRINT '3 ' + CONVERT(VARCHAR,GETDATE(),121)
UPDATE tt
SET
qtyValue = rp.qtyAvgPAAssets
FROM @tt tt
JOIN _rptHousehold rp
ON rp.idAdvisor= tt.AdvisorID
AND rp.idBuild= tt.idBuild
PRINT '4 ' + CONVERT(VARCHAR,GETDATE(),121)
良かった点、感謝 – user1160835