我们的产品包含一些约束,使我们考虑哪种表的设计将产生最佳的性能。
我们的模型:
试题表的读量要比写的要多得多。
我们考虑了两个设计方案:
在此选项中,试题表将包含五个标记列(TagA、TagB等)
“读取”查询主要通过标记或标记获取问题。
发布于 2021-01-17 14:08:59
基本上你只能用
Question - TagsQuestion - Tags对于桥接器表,如果一个标记被设置为许多问题。
如果你有很多问题的话,它也节省了一些空间。
sencond选项有一个问题,即如果不显示所有标记,则每个标记都需要五个内部联接,而对于第一个选项,则可以使用两个联接进行相同的查询。
总的来说,使用桥接器表的第一个选项是更灵活和空间消耗更大的选项。
发布于 2021-01-17 18:36:38
“标签”本质上是对还是错?它们是预先定义的吗?(也就是说,您以后不太可能添加新的标志。)如果是这样的话,一个紧凑的存储方式是
CREATE TABLE ...
tags SET('approved', 'sold', 'built', 'answered', 'lost') NOT NULL测试标志(S)有多种功能,特别是FIND_IN_SET()。
(如果你给我们一些可能的标签名,会有帮助的。)
上次实现“标记”功能时(使用您的术语):
CREATE TABLE tags (
question_id MEDIUMINT UNSIGNED NOT NULL,
tag VARCHAR(55) NOT NULL,
PRIMARY KEY(question_id, tag),
INDEX(tag, question_id)
) ENGINE=InnoDB;PK使查找给定问题的标记具有表现力;二级索引使查找哪些问题具有特定标记的效率更高。这种方法扩展得很好,比3表方法更简单。无限数量的标签是可能的;缺点是拼写错误不会被捕获。
https://dba.stackexchange.com/questions/283411
复制相似问题