在mysql中创建索引不起作用
我正在使用MYSQL Server 5.0,我正在尝试使用SQL Server的下一句话,但根本不起作用。请问是否有任何方法可以将此应用于Mysql。多谢各位在mysql中创建索引不起作用,mysql,sql,indexing,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 ) INCLU
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]
假设您的表是“Stock”,并且您想要一个包含(ArticleID、TranDate、TranCode)的复合索引 我不知道myISAM或InnoDb存储引擎的MySQL中可能有任何其他信息 要包含其他字段以创建覆盖索引,只需将它们添加到声明中:
CREATE INDEX your_index_name ON Stock (ArticleID,TranDate, TranCode, Items, Price);
我假设您报表中“包含”的项目和价格是库存表的一部分
请注意,这里最大的牺牲是在插入和磁盘空间上拥有如此大的覆盖索引。原始的
SQL Server
索引使用了两个功能:覆盖索引(包含下的非键列)和混合排序方向(ASC
和DESC
列)
MySQL
都不支持这两种方法
如果您仍然需要索引(比如说所有三列的精确匹配),请使用@Ray的答案。这不会保留ASC/DESC
,但会创建索引。那么INCLUDE呢?我是说我试着用它来做,但我就是做不到t@Washu:MySQL
不支持索引中的非键列。@Quassnoi来自:这些关键字(ASC和DESC)允许在将来的扩展中用于指定升序或降序索引值存储。目前,它们被解析但被忽略;索引值总是按升序存储。@Washu:这并不是说MySQL
只是一个语法有趣的免费sqlserver
。有些事情是它无法实现的。
CREATE INDEX your_index_name ON Stock (ArticleID,TranDate, TranCode, Items, Price);