我正在更改仍在 MyISAM 中的旧 MySQL 数据库表。我想将其更改为 InnoDB,但我不知道它是否会导致问题,而且它是一个非常重要的表,因此我不想破坏任何内容。
所以我的问题是:当我将 MyISAM 表转换为 InnoDB 时会导致问题吗?
在我的生产数据库生活中,发生过一次悲剧,在恢复最近的备份时,MySQL 引擎类型从 InnoDB 意外更改为 MyISAM。结果是所有参照完整性都丢失了。
是什么导致了这一事件?我的生产数据库是 MySQL Server 5.1。
我正在创建一个 MySQL 表并从本地文件加载数据。
CREATE TABLE `patent` (
`seq_number` mediumint(9) unsigned NOT NULL auto_increment,
`seq_id` varchar(24) default NULL,
`date` date default NULL,
`patent_number` varchar(16) default NULL,
`pat_seq_number` smallint(6) unsigned default '0',
`organism` text,
`assignee` text,
`seq_length` int(8) default '0',
`seq` text,
PRIMARY KEY (`seq_number`),
Index `seq_id` (`seq_id`),
Index `patent_number` (`patent_number`),
Index `pat_seq_number` (`pat_seq_number`),
Index `seq_length` (`seq_length`)
) Engine = MyISAM MAX_ROWS=536870912;
load data local infile '/data/p_table.txt' into table patent ignore 0 lines
(seq_id, date, patent_number, pat_seq_number, organism, assignee, seq, seq_length);
Run Code Online (Sandbox Code Playgroud)
似乎我被困在行数上: …
我想将一些(不是全部)MyISAM 表转换为 InnoDB。
最好的配置是什么?(需要添加InnoDB设置,因为我的里面没有InnoDB设置my.cnf)。
我想用MySql 设计一个论坛脚本。哪个数据库引擎会有更好的性能?MyISAM 还是 InnoDB?
我已将数据库中的一些表从 MyISAM 转换为 InnoDB。之后,我看到文件系统上有一些修改。
数据库的大小增加了,从 2.8GB 到 4.8GB 并且有很多带有前缀 FTS_* 的文件,例如
FTS_000000000000005c_00000000000000f3_INDEX_1.ibd FTS_000000000000005c_00000000000000f3_INDEX_2.ibd FTS_000000000000005c_00000000000000f3_INDEX_3.ibd FTS_000000000000005c_00000000000000f3_INDEX_4.ibd FTS_000000000000005c_00000000000000f3_INDEX_5.ibd FTS_000000000000005c_00000000000000f3_INDEX_6.ibd FTS_000000000000005c_BEING_DELETED_CACHE.ibd FTS_000000000000005c_BEING_DELETED.ibd FTS_000000000000005c_CONFIG.ibd FTS_000000000000005c_DELETED_CACHE.ibd FTS_000000000000005c_DELETED.ibd FTS_0000000000000075_0000000000000118_INDEX_1.ibd FTS_0000000000000075_0000000000000118_INDEX_2.ibd FTS_0000000000000075_0000000000000118_INDEX_3.ibd FTS_0000000000000075_0000000000000118_INDEX_4.ibd FTS_0000000000000075_0000000000000118_INDEX_5.ibd FTS_0000000000000075_0000000000000118_INDEX_6.ibd FTS_0000000000000075_BEING_DELETED_CACHE.ibd FTS_0000000000000075_BEING_DELETED.ibd FTS_0000000000000075_CONFIG.ibd FTS_0000000000000075_DELETED_CACHE.ibd FTS_0000000000000075_DELETED.ibd
我正在使用 MariaDB 并打开 innodb_file_per_table。
我的目录网页有一个数据库。有些表大约有 3GB,有数百万行。
我应该为我的数据库选择什么引擎,InnoDB 还是 MyISAM?
每周只会有大约 1,000 条新记录,大约有 1,000 条删除,但我会经常修改一张表中的一些数据(价格、数量等)。所有其他表将被“密封”。
我需要索引来启用快速查询。哪种存储引擎最适合这种情况?
我已经转换的表有一个小问题,它曾经是 MyISAM,我现在已经把它变成了 InnoDB 表。
原始结构:
id varchar(15),
seqno int(11) auto increment
Joint PK index on the above 2 fields
Run Code Online (Sandbox Code Playgroud)
新结构:
auto_id INT (11) auto increment,
id varchar(15),
seqno int(11)
Run Code Online (Sandbox Code Playgroud)
原始结构在 id 和 seqno 上有一个联合 PK,seqno 会为每个唯一的 id 值自动递增。然后它会在我的 Web 应用程序中返回 seqno 作为 last_insert_id。
使用新的 innodb 结构,因为 innodb 不支持联合主键,我不得不添加一个 auto_id,它现在具有自动增量。
然后我实现了一个触发器来生成每个 id 值的唯一序列号。我的问题是如何设置自动增量 id 以便它返回代替 auto_id 值?当我插入到 my_table 中时,将调用此触发器,以便它可以计算要插入的下一个 seqno 值。
DROP TRIGGER IF EXISTS `innodb_seqno_trigger`;
//
CREATE TRIGGER `innodb_seqno_trigger` BEFORE INSERT ON `my_table`
FOR EACH ROW BEGIN
SET @newseqno = …Run Code Online (Sandbox Code Playgroud)