我创建了2个用于存储文章信息的表。
我创建了用于搜索和列出最新文章用途的KB_Parent表和用于显示文章详细信息的KB_Detail表。
由于KB_Parent将仅用于搜索我所需的MyISAM FullText
和另一个表InnoDB
我对我的桌子是否正确或只是一张桌子可以解决这个问题?
我避免使用外键,所以我不必运行内部查询或连接来获取结果
答案 0 :(得分:1)
如果这两个表之间的唯一区别是“文本”字段,则应该只使用KB_Detail表。使用这两个表没有任何好处。
答案 1 :(得分:1)
你没有在问题中明确说明这一点,但我假设你想要采用这种设计,原因如下:
我会验证断言1是否真的正确。如果摘要查询可能使用单个索引并且可能返回少量行,则断言1不正确。只是崩溃到一张桌子。
如果断言1是正确的并且性能差异很大,那么是的,最好有两个表。但是,如果您使用两个表,我会避免使用MyISAM,因为它不支持事务(即,如果插入时出现错误,您可能会进入两个表中只有一个存在的状态)并且它不支持外键。虽然InnoDB本身不支持FULLTEXT搜索,但您可以使用开源外部开源FULLTEXT搜索引擎(如Sphinx)。
如果您使用两个表,我不明白为什么要重复这些数据。如果有人选择查看行的详细信息,您将从摘要行中获得标题/作者等(因此您不需要进行JOIN查询)。
我也看不到你对外键的含义。它们将允许您在两个表之间建立主要的引用完整性。外键的唯一实际成本是添加/删除/修改行时(需要通过索引进行额外查找以确保其他表中的行存在)。当您在加入两个表时需要进行查询时,它并不昂贵(因为数据库可以通过从第一个表获得的主键查找第二个表 - >最有可能通过一个表连接两个表嵌套循环连接)。