MYSQL以逗号分隔的ID与单独的表

Imd*_*dad 0 mysql

考虑一个products包含产品详细信息(包括其类别)的表.一个产品可能属于多个类别,因此我将其保留为逗号分隔的类别ID列表.

我知道这不是规范化的方法.

任何MYSQL专家都能告诉我哪种方法可以更快地选择特定类别的产品.

如果采用规范化方法,显然我们必须加入products表和products_category_relation表.

在我的方法中,我们必须编写一个类似的查询来查找产品(假设我们正在搜索类别ID 10)

SELECT p.* 
FROM products p
WHERE p.category like '10' 
OR p.category like '10,%'
OR p.category like '%,10'
OR p.category like '%,10,%'
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我这种方法是否更快或JOIN方法会更快?

我知道正常化.我知道我的方法涉及的其他风险.但在我的情况下,它们并不重要.所以,我关注速度.

任何有关其速度或实际测试结果的理论解释都是受欢迎的.

UPDATE

我正在使用myISAM引擎产品表product_id 在表的category列上有主键FullText索引products

pon*_*cha 5

尝试使用FIND_IN_SET功能.

SELECT * FROM `products` WHERE FIND_IN_SET('10',`category`)>0;
Run Code Online (Sandbox Code Playgroud)

然后,您可以将结果与规范化方法进​​行比较,但这肯定比多个LIKE子句更强大