我正在使用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]
答案 0 :(得分:6)
原始SQL Server
索引使用了两个功能:覆盖索引(INCLUDE
下的非键列)和混合排序方向(ASC
和DESC
列)。< / 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表格的一部分。
请注意,此处的重大牺牲是在插入和磁盘空间上具有如此大的覆盖索引。