将两个表合并为一个以提高搜索速度?

时间:2013-10-21 23:33:27

标签: mysql

我有一个拥有超过100万种产品的OpenCart数据库。搜索查询是在两个单独的表上进行的,一个包含ID,另一个包含使用%LIKE%查询和INNER JOIN的产品说明。 我读到将两个表合并为一个以摆脱JOINS并提高速度,你们认为这是一个好的想法吗?

以下是现在生成的查询:

 SELECT COUNT(DISTINCT p.product_id) AS total 
 FROM oc_product p 
 INNER JOIN oc_product_description pd 
 ON (pd.product_id = p.product_id ) 
 WHERE p.status = 1 
 AND ( pd.name LIKE 'orange' OR pd.tag LIKE 'orange')

我使用pd.name和pd.tag作为标准。

1 个答案:

答案 0 :(得分:0)

理论上,将两个表组合成一个表肯定会提高查​​询速度。但是,在某些情况下,由于重读写操作,这可能不是一个简单的解决方案。如果您没有大量的用户/管理员更新可搜索的字段值(如标记),则将表合并为一个是合理的决定。

可能还有其他一些方法可以改进查询,例如将多个可搜索字段应用于一个索引并使用子查询而不是连接。

示例:

SELECT 
    COUNT(p.product_id) AS total 
FROM 
    oc_product p 
WHERE 
    p.status = 1 
    AND 
    p.product_id IN 
    (
        SELECT 
            DISTINCT pd.product_id 
        FROM 
            oc_product_description pd 
        WHERE 
            CONCAT_WS(pd.name,pd.tag) LIKE 'orange'
    )

请检查EXPLAIN以获取详细信息和瓶颈。希望它有所帮助。