MySql,如何将开发数据库中的索引导出到生产数据库?

Jul*_*les 14 mysql indexing import export

我一直在研究我的开发数据库,​​并调整了它的性能.

但是,令我惊讶的是,我找不到将索引导出到生产数据库的方法.

我认为有一种简单的方法可以做到这一点.我不想替换生产数据库中的数据.

主要问题是我无法在索引中看到排序,因此甚至难以手动完成.

ori*_*igo 18

也许你的意思是"我如何在我的(现有)实时数据库上重新创建我的开发索引"?

如果是这样,我认为你正在寻找的SQL命令是;

SHOW CREATE TABLE {tablename};

ALTER TABLE ADD INDEX {index_name}(col1,col2)

ALTER TABLE DROP INDEX {index_name}

您可以从"SHOW CREATE TABLE"输出中复制"KEY"和"CONSTRAINT"行,并将其放回"ALTER TABLE ADD INDEX"中.

dev mysql> SHOW CREATE TABLE city;
CREATE TABLE `city` (
  `id` smallint(4) unsigned NOT NULL auto_increment,
  `city` varchar(50) character set utf8 collate utf8_bin NOT NULL default '',
  `region_id` smallint(4) unsigned NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `region_idx` (region_id),
  CONSTRAINT `city_ibfk_1` FOREIGN KEY (`region_id`) REFERENCES `region` (`id`) ON UPDATE CASCADE ON DELETE RESTRICT
) ENGINE=InnoDB;

live mysql> SHOW CREATE TABLE city;
CREATE TABLE `city` (
  `id` smallint(4) unsigned NOT NULL auto_increment,
  `city` varchar(50) character set utf8 collate utf8_bin NOT NULL default '',
  `region_id` smallint(4) unsigned NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB;

live mysql> ALTER TABLE `city` ADD KEY `region_idx` (region_id);
live mysql> ALTER TABLE `city` ADD CONSTRAINT `city_ibfk_1` FOREIGN KEY (`region_id`) REFERENCES `region` (`id`) ON UPDATE CASCADE ON DELETE RESTRICT;
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!


vig*_*y28 8

扩展@origo的回答。有一种情况我需要为一堆索引提取 DDL。这个脚本完成了这项工作。

来源:https : //rogerpadilla.wordpress.com/2008/12/02/mysql-export-indexes/

SELECT
CONCAT(
'ALTER TABLE ' ,
TABLE_NAME,
' ',
'ADD ',
IF(NON_UNIQUE = 1,
CASE UPPER(INDEX_TYPE)
WHEN 'FULLTEXT' THEN 'FULLTEXT INDEX'
WHEN 'SPATIAL' THEN 'SPATIAL INDEX'
ELSE CONCAT('INDEX ',
INDEX_NAME,
' USING ',
INDEX_TYPE
)
END,
IF(UPPER(INDEX_NAME) = 'PRIMARY',
CONCAT('PRIMARY KEY USING ',
INDEX_TYPE
),
CONCAT('UNIQUE INDEX ',
INDEX_NAME,
' USING ',
INDEX_TYPE
)
)
),
'(',
GROUP_CONCAT(
DISTINCT
CONCAT('', COLUMN_NAME, '')
ORDER BY SEQ_IN_INDEX ASC
SEPARATOR ', '
),
');'
) AS 'Show_Add_Indexes'
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = 'PLEASE CHANGE HERE'
GROUP BY TABLE_NAME, INDEX_NAME
ORDER BY TABLE_NAME ASC, INDEX_NAME ASC;
Run Code Online (Sandbox Code Playgroud)


sha*_*mar 5

首先,阅读此处的教程,了解如何使用 SQL 查询导出 MySQL 索引。更远:

  1. 如果您完成了数据库的转储并将其导入到另一个(使用 PHPMyAdmin 等),索引将重新生成。

  2. 如果可能,您可以将整个 MySQL 数据库文件夹的内容复制到生产数据库。这也能很快解决问题。在 MySQL 文档中阅读更多信息。