与几乎所有 SQL 一样,它实际上取决于一大堆因素。
通常,针对单个表的查询可能会比针对两个表的查询执行得更好。
使用相对较短的“category_name”值(例如 8 个字符或更少),并使用适当的索引 category_name 作为前导列,您将获得良好的查询性能,例如:
SELECT * FROM websites WHERE category_name = 'movies' ORDER BY category
为获得最佳性能,请考虑ENUM
category_name 的列。但这意味着 for 的值category_name
将作为列定义的一部分“固定”。
如果您需要获取不同 category_name 值的列表(例如,对于下拉列表框),则首选单独的表(例如示例中的 Categories 表)。
最大的问题是“类别”是否是您系统中的实体。也就是说,是一个“类别”,一个人、地点、事物、概念或事件,对业务很重要,可以唯一标识,并且您需要存储有关信息。
如果是这样,它是一个“实体”,你想为它创建一个单独的表。
您需要考虑的一个更大的问题是网站和类别之间的关系。一个网站可以有多个类别吗?
如果是这样,那么您需要考虑一个关系表,该表将网站和类别相关联。例如:
website_category (website_id, category_id)
在您的数据库设计中适当地表示实体之间的“实体”和“关系”至关重要。在进行调整以优化性能之前,请确保您首先做到了这一点。