এসকিউএল সার্ভার কলাম স্টোর সূচী ব্যবহার করে
ভাল, ঠিক আছে, কেবল একটি - একটি ক্লাস্টার্ড সিএস সূচক।
আপনি যে হার্ডওয়্যারটি আমি এটি করেছিলাম সে সম্পর্কে যদি আপনি পড়তে চান তবে এখানে যান । সম্পূর্ণ প্রকাশ, আমি যে ব্লগ পোস্টটি লিখেছিলাম সেটির ওয়েবসাইটে আমি কাজ করি।
পরীক্ষায়!
একটি দুর্দান্ত বড় টেবিল তৈরি করতে এখানে কিছু জেনেরিক কোড রয়েছে। ইভান হিসাবে একই সতর্কতা, এটি তৈরি এবং সূচী করতে কিছু সময় নিতে পারে।
USE tempdb
CREATE TABLE t1 (Id INT NOT NULL, Amount INT NOT NULL)
;WITH T (N)
AS ( SELECT X.N
FROM (
VALUES (NULL), (NULL), (NULL),
(NULL), (NULL), (NULL),
(NULL), (NULL), (NULL),
(NULL) ) AS X (N)
), NUMS (N) AS (
SELECT TOP ( 710000000 )
ROW_NUMBER() OVER ( ORDER BY ( SELECT NULL )) AS N
FROM T AS T1, T AS T2, T AS T3,
T AS T4, T AS T5, T AS T6,
T AS T7, T AS T8, T AS T9,
T AS T10 )
INSERT dbo.t1 WITH ( TABLOCK ) (
Id, Amount )
SELECT NUMS.N % 999 AS Id, NUMS.N % 9999 AS Amount
FROM NUMS;
--(705032704 row(s) affected) --Aw, close enough
ওয়েল, ইভান সরলীকরণের জন্য ধিক্কার জানাই, কিন্তু আমি স্বপ্ন করেছি যে আগে।
সূচী সংজ্ঞা এখানে। লা এবং ডি এবং দাহ।
CREATE CLUSTERED COLUMNSTORE INDEX CX_WOAHMAMA ON dbo.t1
একটি গণনা দেখে, প্রতিটি আইডির একটি সুন্দর এমনকি বিতরণ থাকে:
SELECT t.Id, COUNT(*) AS [Records]
FROM dbo.t1 AS t
GROUP BY t.Id
ORDER BY t.Id
ফলাফল:
Id Records
0 5005005
1 5005006
2 5005006
3 5005006
4 5005006
5 5005006
...
994 5005005
995 5005005
996 5005005
997 5005005
998 5005005
প্রতিটি আইডিতে ~ 5,005,005 সারি রয়েছে, আমরা আপনাকে একটি 10 মিলিয়ন সারি যোগফল পেতে আইডিগুলির একটি দুর্দান্ত ছোট পরিসরের দিকে নজর দিতে পারি।
SELECT COUNT(*) AS [Records], SUM(t.Amount) AS [Total]
FROM dbo.t1 AS t
WHERE t.Id > 0
AND t.Id < 3;
ফলাফল:
Records Total
10010012 50015062308
ক্যোয়ারী প্রোফাইল:
Table 't1'. Scan count 6, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 2560758, lob physical reads 0, lob read-ahead reads 0.
Table 't1'. Segment reads 4773, segment skipped 0.
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL Server Execution Times:
CPU time = 564 ms, elapsed time = 106 ms.
মজা করার জন্য, একটি বৃহত্তর সমষ্টি:
SELECT COUNT(*) AS [Records], SUM(CONVERT(BIGINT, t.Amount)) AS [Total]
FROM dbo.t1 AS t
WHERE t.Id > 0
AND t.Id < 101;
ফলাফল:
Records Total
500500505 2501989114575
ক্যোয়ারী প্রোফাইল:
Table 't1'. Scan count 6, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 2560758, lob physical reads 0, lob read-ahead reads 0.
Table 't1'. Segment reads 4773, segment skipped 0.
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL Server Execution Times:
CPU time = 1859 ms, elapsed time = 321 ms.
আশাকরি এটা সাহায্য করবে!