mysql - mysql中使用concat创建复合索引

标签 mysql grouping concatenation

使用以下命令我可以获得创建索引命令,

SELECT CONCAT ('
create index ',index_name,' on ',table_schema,'.',table_name,' (',COLUMN_NAME,');'  
) FROM 
inf_schema.STATS WHERE 
table_schema='employee' AND 
table_name='FILESPROC' AND 
index_name NOT LIKE 'PRIMARY' ;

我得到以下输出:

create index FILENAMEPROCID on employee.FILESPROCESSED (PROCID);
create index FILENAMEPROCID on employee.FILESPROCESSED (FILENAME);
create index NENDDATEDataName on employee.FILESPROCESSED (DSN);
create index NENDDATEDataName on employee.FILESPROCESSED (ENDDATE);
create index NENDDATEDataName on employee.FILESPROCESSED (DataName);
create index DSN on employee.FILESPROCESSED (DSN);
create index ENDDATE on employee.FILESPROCESSED (ENDDATE);

但是,我需要以下方式的输出:

create index FILENAMEPROCID on employee.FILESPROCESSED (PROCID, FILENAME);
create index NENDDATEDataName on employee.FILESPROCESSED (DSN, ENDDATE, DataName);
create index DSN on employee.FILESPROCESSED (DSN);
create index ENDDATE on employee.FILESPROCESSED (ENDDATE);

这样我就能够创建复合索引。我该如何实现这一目标?

最佳答案

对具有相同 INDEX_NAME 的所选 COLUMN_NAME 使用 GROUP_CONCAT

SELECT 
        CONCAT (
          'create index ', index_name, ' on ', table_schema, '.', table_name, 
          ' ( ', GROUP_CONCAT( COLUMN_NAME SEPARATOR ', ' ), ' );'  
        ) indexes_scripts
  FROM 
        inf_schema.STATS 
 WHERE 
        table_schema='employee' 
   AND  table_name='FILESPROC'
   AND  index_name NOT LIKE 'PRIMARY' 
 GROUP BY index_name

关于mysql - mysql中使用concat创建复合索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23339063/

相关文章:

mysql:从一列创建多列

mysql - 在 MySQL(5.1)中,检测一组列不等于另一组列的最佳方法是什么

json - 使用 jq 解析每行 JSON 记录?

jquery - 使用 jQuery 将不同数量的具有相同类的 div 分组,直到 "last"类

mysql - CONCAT 列并复制到其他表 MySQL

python - 使用换行符将内容从一个文件附加到另一个文件

mysql - LEFT JOIN 不返回 NULL 行

php - 为什么删除按钮会使编辑按钮执行无效

c# - 在两个组的 ListView 中显示单列

c - c中其他宏串联内的宏串联