【问题标题】:How to change engine of table without making any changes to table如何更改表的引擎而不对表进行任何更改
【发布时间】:2015-04-18 04:08:10
【问题描述】:

当我尝试对其进行“全文搜索”时,我的表正在使用“InnoDB”存储引擎给我一个错误“使用的表不支持全文索引” 这就是为什么我试图将我的表引擎从“InnoDB”更改为“MyIsam”,但它再次给了我错误“无法删除或更新表外键约束失败”。它链接到其他表,我不想同时更改其中的表和数据

当我跑步时

SHOW VARIABLES LIKE "%version%"

innodb_version	1.1.8
protocol_version	10
slave_type_conversions	
version	5.5.24
version_comment	MySQL Community Server (GPL)
version_compile_machine	x86
version_compile_os	Win64

这是我的sql版本和InnoDb版本,请帮帮我。

【问题讨论】:

    标签: mysql sql database innodb full-text-indexing


    【解决方案1】:

    选项 1:升级到 MySQL 5.6

    由于您不想更改数据,因此您唯一的办法是升级到 MySQL 5.6,因为 InnoDB 在该版本中支持 FULLTEXT 索引。

    我已经提到在 DBA StackExchange (Full text search results in a large amount of time spent in 'FULLTEXT initialization') 中使用 InnoDB 特定的 FULLTEXT 选项

    如需完整说明,请please read the MySQL Documentation on it

    选项 2:切换到 MyISAM

    您需要删除约束来更改存储引擎

    ALTER TABLE yourtable ENGINE=MyISAM;
    

    选项 3:使用 MySQL 复制

    如果你有一个从站,运行这个

    SET foreign_key_checks = 0;
    SET unique_checks = 0;
    STOP SLAVE;
    ALTER TABLE childtable DROp CONSTRAINT ... ;
    ALTER TABLE parenttable ENGINE=MyISAM;
    ALTER TABLE childtable ENGINE=MyISAM;
    ALTER TABLE ADD FULLTEXT ftindexname (columns);
    START SLAVE;
    

    这样,Master 保留所有 InnoDB,而 slave 的表更改为 MyISAM。

    之所以可以这样做,是因为我在 DBA StackExchange 上写了一篇题为 Can I have an InnoDB master and MyISAM slaves with Full-Text for searching? 的帖子,介绍了如何做到这一点。

    完成此操作后,只需在 Slave 上执行 FULLTEXT 搜索。

    【讨论】:

    • 如果是innodb全文搜索性能很慢,如果我可以更改我的表约束请回复此
    • 如果您不调整选项,InnoDB 全文会很慢。这就是我在 DBA StackExchange 帖子中表达的内容。在尝试任何操作之前,您仍然需要升级到 MySQL 5.6。
    • 我可以将引擎类型更改为“MyIsam”
    猜你喜欢
    • 1970-01-01
    • 2011-05-13
    • 2011-11-24
    • 2021-12-11
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2023-03-30
    相关资源
    最近更新 更多