问题描述
我正在尝试在 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
如果您想让查询运行得更快,您可以添加非聚集索引。
您可以参考以下链接了解更多信息:
- https://www.techrepublic.com/article/index-on-multiple-columns-for-sql-performance/
- https://docs.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-tables-index
谢谢:)