Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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 如果Alter table中的单个索引是多列索引的一部分,则不会添加该索引_Mysql_Indexing_Alter Table - Fatal编程技术网

Mysql 如果Alter table中的单个索引是多列索引的一部分,则不会添加该索引

Mysql 如果Alter table中的单个索引是多列索引的一部分,则不会添加该索引,mysql,indexing,alter-table,Mysql,Indexing,Alter Table,到目前为止,我在一个存储过程中使用了以下内容: IF NOT EXISTS(SELECT 1 FROM information_schema.statistics WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME= 'food' AND (INDEX_NAME='ix_meat' OR COLUMN_NAME='meat') ) THEN CREATE INDEX ix_meat ON food (meat); END I

到目前为止,我在一个存储过程中使用了以下内容:

IF NOT EXISTS(SELECT 1 FROM information_schema.statistics WHERE TABLE_SCHEMA=DATABASE()
        AND TABLE_NAME= 'food'  AND (INDEX_NAME='ix_meat' OR COLUMN_NAME='meat')
    )
THEN
    CREATE INDEX ix_meat ON food (meat);
END IF; 


IF NOT EXISTS(SELECT 1 FROM information_schema.statistics WHERE TABLE_SCHEMA=DATABASE()
        AND TABLE_NAME= 'food'  AND (INDEX_NAME='ix_greens' OR COLUMN_NAME='greens')
    )
THEN
    CREATE INDEX ix_greens ON food(greens);
END IF; 
食品中除主要成分外的其他成分包括:

水果、份量、性别、重量

如果这些列上没有单独的索引,或者其中任何一个是多列索引的一部分,但在右侧(如性别、绿色),我只想添加一个索引。为了确保单个列索引不存在,我需要对该列进行行计数检查。如何修改此脚本以实现此目的?

使用seq_in_index列来指示该列在索引中的位置。您希望添加索引,除非它是索引中的第一列

IF NOT EXISTS(SELECT 1 FROM information_schema.statistics WHERE TABLE_SCHEMA=DATABASE()
        AND TABLE_NAME= 'food'  AND (INDEX_NAME='ix_meat' OR (COLUMN_NAME='meat' AND SEQ_IN_INDEX = 1))
    )
THEN
    CREATE INDEX ix_meat ON food (meat);
END IF; 


IF NOT EXISTS(SELECT 1 FROM information_schema.statistics WHERE TABLE_SCHEMA=DATABASE()
        AND TABLE_NAME= 'food'  AND (INDEX_NAME='ix_greens' OR (COLUMN_NAME='greens' AND SEQ_IN_INDEX = 1))
    )
THEN
    CREATE INDEX ix_greens ON food(greens);
END IF; 

我不明白这个问题。您的查询不区分单列索引和多列索引。它只是检查该列是否在任何索引中。请注意,如果您希望只测试绿色的查询使用该索引,它必须是索引中的第一列。所以你应该检查seq_in_index=1。是的,这是我关于如何区分单列和多列索引的问题,现在我只检查任何一个。我尝试了两个堆栈外的东西,但都不起作用。如果已经有一个单列索引,为什么要添加索引?它肯定不允许这样做。如果该列上没有单个索引,或者该列是多列索引的一部分,但位于右侧(如性别、绿色),我只想添加单个索引