在mysql中创建索引不起作用

时间:2012-11-14 21:43:44

标签: mysql sql indexing

我正在使用MYSQL Server 5.0并且我试图使用SQL Server的下一句话并且根本不工作。请问有什么方法可以将它应用于Mysql。非常感谢你。

CREATE NONCLUSTERED INDEX [IX_Dave_General] ON [dbo].[Stock]

    (
            [ArticleID] ASC,
              [TranDate] DESC,
            [TranCode] ASC
    )
    INCLUDE ( [Items],
    [Price]) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

2 个答案:

答案 0 :(得分:6)

原始SQL Server索引使用了两个功能:覆盖索引(INCLUDE下的非键列)和混合排序方向(ASCDESC列)。< / p>

MySQL都不支持这些内容。

如果你仍然需要索引(比如所有三列的完全匹配),请使用@ Ray的答案。

答案 1 :(得分:4)

假设您的表是'Stock',并且您想要一个带有(ArticleID,TranDate,TranCode)的复合索引。

CREATE INDEX your_index_name ON Stock (ArticleID,TranDate, TranCode);

我不知道id在myISAM或InnoDb存储引擎的MySQL中可能有任何其他信息。

要包含其他字段以制作覆盖索引,只需将它们添加到声明中:

CREATE INDEX your_index_name ON Stock (ArticleID,TranDate, TranCode, Items, Price);

我假设您的对帐单中“包含”的商品和价格是Stock表格的一部分。

请注意,此处的重大牺牲是在插入和磁盘空间上具有如此大的覆盖索引。