在mysql中创建索引不起作用

问题描述 投票:0回答: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]
mysql sql indexing
2个回答
6
投票

原来的

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

这些都不受

MySQL
支持。

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


4
投票

假设您的表是

Stock
并且您想要一个包含 (ArticleID,TranDate, TranCode) 的复合索引。

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

我不知道 MySQL 中是否可以为 myISAM 或 InnoDb 存储引擎提供任何其他信息。

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

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

我假设您的报表中“包含”的商品和价格是库存表的一部分。

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

© www.soinside.com 2019 - 2024. All rights reserved.