如何在 Azure Synapse Analytics 中创建唯一聚集索引?

How do I create a unique clustered index in Azure Synapse Analytics?

我正在尝试在 Azure Synapse Analytics

上创建一个具有唯一聚集索引的 table

我试过了

CREATE TABLE [myschema].[test] (
    ID1 int UNIQUE NOT ENFORCED,
    ID2 int UNIQUE NOT ENFORCED,
    message varchar(MAX)
) 
WITH (
    CLUSTERED INDEX (ID1, ID2)
)

CREATE TABLE [myschema].[test] (
    ID1 int,
    ID2 int,
    message varchar(MAX),
    CONSTRAINT test_unique UNIQUE(ID1,ID2) NOT ENFORCED
) 
WITH (
    CLUSTERED INDEX (ID1, ID2)
)

我知道它们是等价的,而且我两次都收到此错误

Error: Cannot use duplicate column names in statistics. Column name 'ID1' listed more than once.

在 Synapse 中,您只能在一列上创建一个聚簇索引。

如果您需要进一步提高性能,那么您需要创建一个非聚集索引。

在您的情况下,代码将是:

CREATE TABLE [myschema].[test] (
ID1 int UNIQUE NOT ENFORCED,
ID2 int UNIQUE NOT ENFORCED,
message varchar(MAX)) WITH (
CLUSTERED INDEX (ID1))              --Only ID1 is used as clustered index

如果你想让查询工作得更快,你可以添加非聚集索引。

您可以参考以下链接了解更多:

  1. https://www.techrepublic.com/article/index-on-multiple-columns-for-sql-performance/
  2. https://docs.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-tables-index

谢谢:)

我们已注意到此问题并正在努力解决。您确实有解决此问题的方法,请试试这个,它应该会有所帮助。

CREATE TABLE [test1] (
    ID1 int UNIQUE NOT ENFORCED,
    ID2 int UNIQUE NOT ENFORCED,     
    message varchar(MAX)
) 
WITH (
    HEAP
)
GO
CREATE CLUSTERED INDEX isTest ON [Test1](ID1,ID2)