2

我正在使用 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]
4

2 回答 2

6

原始SQL Server索引使用了两个特性:覆盖索引(下有非键列INCLUDE)和混合排序方向(ASCDESC列)。

这些都不支持MySQL

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

于 2012-11-14T21:54:20.393 回答
4

假设您的表是“Stock”,并且您想要一个包含(ArticleID、TranDate、TranCode)的复合索引。

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

对于 myISAM 或 InnoDb 存储引擎,我不知道 MySQL 中是否有任何其他信息。

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

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

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

请注意,这里的巨大牺牲是插入和磁盘空间以拥有如此大的覆盖索引。

于 2012-11-14T21:46:29.250 回答