t-sql:散列是否保留顺序?
t-sql: does hashing preserve order?
我需要在 SQL table 上散列主键,但我需要保留数字顺序。
哈希函数HASHBYTES ( '<algorithm>', { @input | 'input' } )
会保留这样的顺序吗? function doc
这很容易测试:
CREATE TABLE dbo.YourTable (ID int IDENTITY,
GUID uniqueidentifier DEFAULT NEWSEQUENTIALID(),
HashedID varbinary(8000) NULL,
HashedGUID varbinary(8000) NULL);
GO
INSERT INTO dbo.YourTable
DEFAULT VALUES
GO 10
UPDATE dbo.YourTable
SET HashedID = HASHBYTES('SHA2_256', CONVERT(nvarchar(32),ID)),
HashedGUID = HASHBYTES('SHA2_256', CONVERT(nvarchar(36),GUID));
GO
SELECT *,
ROW_NUMBER() OVER (ORDER BY HashedID) AS HashedIDOrder,
ROW_NUMBER() OVER (ORDER BY HashedGUID) AS HashedGUIDOrder
FROM dbo.YourTable
ORDER BY ID ASC;
GO
DROP TABLE dbo.YourTable;
对于我得到的结果,答案很明确:“否”。
ID GUID HashedIDOrder HashedGUIDOrder
----------- ------------------------------------ -------------------- --------------------
1 8655266A-0054-EB11-8144-F0921C07876B 10 5
2 8755266A-0054-EB11-8144-F0921C07876B 5 7
3 8855266A-0054-EB11-8144-F0921C07876B 7 9
4 8955266A-0054-EB11-8144-F0921C07876B 3 4
5 8A55266A-0054-EB11-8144-F0921C07876B 2 6
6 8B55266A-0054-EB11-8144-F0921C07876B 6 2
7 8C55266A-0054-EB11-8144-F0921C07876B 9 8
8 8D55266A-0054-EB11-8144-F0921C07876B 1 10
9 8E55266A-0054-EB11-8144-F0921C07876B 8 3
10 8F55266A-0054-EB11-8144-F0921C07876B 4 1
我需要在 SQL table 上散列主键,但我需要保留数字顺序。
哈希函数HASHBYTES ( '<algorithm>', { @input | 'input' } )
会保留这样的顺序吗? function doc
这很容易测试:
CREATE TABLE dbo.YourTable (ID int IDENTITY,
GUID uniqueidentifier DEFAULT NEWSEQUENTIALID(),
HashedID varbinary(8000) NULL,
HashedGUID varbinary(8000) NULL);
GO
INSERT INTO dbo.YourTable
DEFAULT VALUES
GO 10
UPDATE dbo.YourTable
SET HashedID = HASHBYTES('SHA2_256', CONVERT(nvarchar(32),ID)),
HashedGUID = HASHBYTES('SHA2_256', CONVERT(nvarchar(36),GUID));
GO
SELECT *,
ROW_NUMBER() OVER (ORDER BY HashedID) AS HashedIDOrder,
ROW_NUMBER() OVER (ORDER BY HashedGUID) AS HashedGUIDOrder
FROM dbo.YourTable
ORDER BY ID ASC;
GO
DROP TABLE dbo.YourTable;
对于我得到的结果,答案很明确:“否”。
ID GUID HashedIDOrder HashedGUIDOrder
----------- ------------------------------------ -------------------- --------------------
1 8655266A-0054-EB11-8144-F0921C07876B 10 5
2 8755266A-0054-EB11-8144-F0921C07876B 5 7
3 8855266A-0054-EB11-8144-F0921C07876B 7 9
4 8955266A-0054-EB11-8144-F0921C07876B 3 4
5 8A55266A-0054-EB11-8144-F0921C07876B 2 6
6 8B55266A-0054-EB11-8144-F0921C07876B 6 2
7 8C55266A-0054-EB11-8144-F0921C07876B 9 8
8 8D55266A-0054-EB11-8144-F0921C07876B 1 10
9 8E55266A-0054-EB11-8144-F0921C07876B 8 3
10 8F55266A-0054-EB11-8144-F0921C07876B 4 1