Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mysql中创建索引不起作用_Mysql_Sql_Indexing - Fatal编程技术网

在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

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

假设您的表是“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);