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

问题描述

我正在尝试在 Azure Synapse Analytics 上创建一个具有唯一聚集索引的表

我试过了

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)
)

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

错误:不能在统计中使用重复的列名。列名“ID1”列出了不止一次。

解决方法

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

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)
,

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

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

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

CREATE TABLE [myschema].[test] (
ID1 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

谢谢:)