我有一个拥有超过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作为标准。
答案 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以获取详细信息和瓶颈。希望它有所帮助。