我在一个网站上工作,现在有数百万条记录(抱歉不能透露是哪个网站),最初只有几百条记录,所以下面的查询是可以接受的
查询:从…中选择*例如“%”、3、%”;
但现在它只会杀死数据库,因为对于每个查询,它都必须使用上面的查询遍历整个2百万条记录
分类表
身份证名称
1名女性
2时尚
3服装
4附件
5顶
6件连衣裙
7耳环
8件短裙
9号长裙
10男
产品表
ID…..类别…..其他位
1,1,2,3,6,9,……
2,1,2,4,7,
3,1,2,3,5,
4,10,2,3,4,
你的照片和上面发生的一样。现在,如果我对产品表中的类别行执行全文索引,它只提供1个基数:(
我怎样才能克服这一点?
我已经考虑过对每一个类别的行进行复制,但是数据库目前是巨大的,有了复制,它将变成大约10千兆…更像是一个问题,然后是一个解决方案

最佳答案

我看到的一个解决方案是使用三个表:
类别列出您的类别
产品列出了您的产品,没有任何附加的类别信息
类别映射是一个特殊的表:每一行都将一个产品id链接到一个类别id
要按类别查找产品,可以将类别映射中的行与产品中的行匹配。
这是一个不完美的例子,但它得到了要点:

SELECT * FROM
(
    SELECT * FROM category_map
    WHERE category_id=1
) AS map
INNER JOIN products
ON products.id = map.product_id;

表连接是一个非常强大的工具;如果您刚开始使用它们,您可能需要花一些时间来阅读它们。Coding Horror has a visual explanation that skims over the details
最好设置外键约束,或者确保类别映射中的条目与产品和类别中的现有条目相对应。

关于php - MySQL:具有多个类别的产品的SQL和DB,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17846414/

10-11 05:12
查看更多