gpt4 book ai didi

mysql - SQL : Ideal engine type (MyISAM vs InnoDB) and data type for unique text column

转载 作者:行者123 更新时间:2023-11-29 14:49:54 26 4
gpt4 key购买 nike

嗨,我有一个使用 mysql 的 php 网站,并且有一个表,其中有一列名为“名称”。我希望它具有以下功能:

  • 它应该是 varchar(N) 类型,就像常规名称一样。
  • 它可能很长,但绝对不应该包含所谓的“描述”,因为那是在我不关心搜索的另一个领域。 (也许将来,我什至可能会把它放在另一个表中)
  • 它必须是唯一的且可搜索的,这似乎使其成为主键的合适候选者。
  • 搜索是简单类型,只需像 mysql LIKE %keyword% 这样的行为即可。
  • 该表(非常)频繁地读取,每隔一段时间就会插​​入新行,很少删除/更新行。
  • 许多其他表引用此表上的值,理想情况下我希望在其他表上有外键约束,这导致我想要使用 InnoDB。

我的问题是,这个表应该使用MyISAM还是InnoDB?另外,考虑到读取频率/使用的内存量/互联网上针对 varchar 主键的警告量,我的不太长的 varchar 用作主键是否可以?

但是我真的很想从 InnoDB 提供的外键约束中受益,还是我应该只在 php 级别担心它?

我特别关心的是 MyISAM 的全文搜索功能。我尝试阅读官方 mysql 网页来了解它的用途,但未能足够理解来判断我的情况是否会从中受益。

最佳答案

简短回答:具有代理主键的 InnoDB。

更长的答案

由于您打算让具有 Name 列的表包含许多子表,因此我建议使用 INT UNSIGNED (甚至 BIGINT UNSIGNED 如果您的数据保证的话)。这样,您的所有子表中就不需要包含 Name 列,从而节省空间。

在InnoDB中,短主键是最好的选择,因为主键包含在所有二级索引中:http://dev.mysql.com/doc/refman/5.1/en/innodb-index-types.html

FULLTEXT 索引不需要进行简单的 LIKE('%keyword%') 匹配。如果您对自然语言匹配感兴趣,但您并未将其列为要求,那么它们会有所帮助。

关于mysql - SQL : Ideal engine type (MyISAM vs InnoDB) and data type for unique text column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5992315/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com