0

我在 MYSQL 中有这个表:

产品(prodId,隐藏)
cat_binds(prodId,SptPath)
参数(paramId,prodId,langId,值)

询问

选择
        DISTINCT(参数值)
从
        产品,
        猫绑定,
        参数
在哪里
        products.prodId = params.prodId
        和
        params.paramId = '1'
        和
        params.langId = '1'
        和
        products.prodId = cat_binds.prodId
        和
        cat_binds.SptPath LIKE '-2147483644\_%'
        和
        products.Hide = '0'

如何优化这个查询?如何创建正确的索引以生成更少的结果所需的行。

感谢帮助

4

2 回答 2

0

使用连接而不是获取不需要的行的笛卡尔。

SELECT DISTINCT
  (params.value)
FROM products
  LEFT JOIN cat_binds
    ON cat_binds.prodId = products.prodId
  LEFT JOIN params
    ON params.prodId = products.prodId
WHERE params.paramId = '1'
    AND params.langId = '1'
    AND cat_binds.SptPath LIKE '-2147483644\_%'
    AND products.Hide = '0'
于 2013-04-02T08:59:14.333 回答
0

您的 SQL 看起来不错,如果您在所有 ID 字段上添加了主索引,我认为它会很好。MySQL 还将在内部进行优化以使顺序正确。我只关心包含 LIKE 表达式的 WHERE 条件。由于您在最后使用 '%' 条件,我认为将索引添加到此列会有所帮助,但如果您将 '%' 放在前面,则索引不会有太大影响

于 2013-04-02T09:00:27.720 回答