考虑一个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
尝试使用FIND_IN_SET
功能.
SELECT * FROM `products` WHERE FIND_IN_SET('10',`category`)>0;
Run Code Online (Sandbox Code Playgroud)
然后,您可以将结果与规范化方法进行比较,但这肯定比多个LIKE子句更强大