MySQL忽略了索引问题

MySQL忽略了索引问题,mysql,sql,performance,indexing,Mysql,Sql,Performance,Indexing,在最近对我们网站的MySQL v5.5监控过程中,我们发现它经常会生成如此繁重的查询: SELECT b.PRODUCT_ID, b1.PRODUCT_ID, 1 FROM b_sale_basket b, b_sale_basket b1 WHERE b.ORDER_ID = b1.ORDER_ID AND b.ORDER_ID = 15500 AND b.ID <> b1.ID AND NOT EXISTS (SELECT 1 FROM b_sale_product2produ

在最近对我们网站的MySQL v5.5监控过程中,我们发现它经常会生成如此繁重的查询:

SELECT b.PRODUCT_ID, b1.PRODUCT_ID, 1 FROM b_sale_basket b, b_sale_basket b1 
WHERE b.ORDER_ID = b1.ORDER_ID AND b.ORDER_ID = 15500 AND b.ID <> b1.ID AND
NOT EXISTS (SELECT 1 FROM b_sale_product2product d 
     WHERE d.PRODUCT_ID = b.PRODUCT_ID AND d.PARENT_PRODUCT_ID = b1.PRODUCT_ID);
解释结果:

+----+--------------------+-------+------+----------------------------------------------------------------------------------------------------------------+--------------------------------+---------+-------------------------+------+-------------+
| id | select_type        | table | type | possible_keys                                                                                                  | key                            | key_len | ref                     | rows | Extra       |
+----+--------------------+-------+------+----------------------------------------------------------------------------------------------------------------+--------------------------------+---------+-------------------------+------+-------------+
|  1 | PRIMARY            | b     | ref  | IXS_BASKET_ORDER_ID                                                                                            | IXS_BASKET_ORDER_ID            | 5       | const                   |  179 | Using where |
|  1 | PRIMARY            | b1    | ref  | IXS_BASKET_ORDER_ID                                                                                            | IXS_BASKET_ORDER_ID            | 5       | const                   |  179 | Using where |
|  2 | DEPENDENT SUBQUERY | d     | ref  | IXS_PRODUCT2PRODUCT_PRODUCT_ID,IXS_PRODUCT2PRODUCT_PARENT_AND_PRODUCT_ID,IXS_PRODUCT2PRODUCT_PARENT_PRODUCT_ID | IXS_PRODUCT2PRODUCT_PRODUCT_ID | 4       | b.PRODUCT_ID |    1 | Using where |
+----+--------------------+-------+------+----------------------------------------------------------------------------------------------------------------+--------------------------------+---------+-------------------------+------+-------------+
请尝试添加-

Force index   (IXS_PRODUCT2PRODUCT_PARENT_AND_PRODUCT_ID)
请尝试添加-

Force index   (IXS_PRODUCT2PRODUCT_PARENT_AND_PRODUCT_ID)
b_sale_product2product看起来非常像一个多:多映射表,加上一个cnt。如果这是正确的,那么去掉ID,它只会减慢速度。并且未能抓住配对产品标识、父产品标识必须唯一的需要。看我的。唉,这实际上无助于您当前的查询;但它应该对其他人有所帮助

或者b_sale_product2product是一个层次结构,正如父级所暗示的那样?如果是,每个产品是否只有一个母公司?如果是这种情况,查询应该是可简化的

您的查询从两个表(每个表大约有179行)之间的交叉联接开始。然后在p2p表中进行32041次查找。但是在那张表中实际上只有179行有趣的内容

也就是说,如果您从179行产品开始,再加上单亲,那么只有179项需要检查,而不是179*179。没有交叉连接。像这样的订单

FROM b_sale_basket
JOIN b_sale_product2product ON ...
JOIN b_sale_basket ON ...
我的大脑在试图弄明白你的查询试图做什么时遇到了足够的麻烦;没有足够的脑力为您写出这个查询。

b_sale_product2product看起来非常像一个多:多映射表,再加上一个cnt。如果这是正确的,那么去掉ID,它只会减慢速度。并且未能抓住配对产品标识、父产品标识必须唯一的需要。看我的。唉,这实际上无助于您当前的查询;但它应该对其他人有所帮助

或者b_sale_product2product是一个层次结构,正如父级所暗示的那样?如果是,每个产品是否只有一个母公司?如果是这种情况,查询应该是可简化的

您的查询从两个表(每个表大约有179行)之间的交叉联接开始。然后在p2p表中进行32041次查找。但是在那张表中实际上只有179行有趣的内容

也就是说,如果您从179行产品开始,再加上单亲,那么只有179项需要检查,而不是179*179。没有交叉连接。像这样的订单

FROM b_sale_basket
JOIN b_sale_product2product ON ...
JOIN b_sale_basket ON ...

我的大脑在试图弄明白你的查询试图做什么时遇到了足够的麻烦;没有足够的脑力为您写出这个查询。

您能用一个不相关的子查询来代替吗。小数点18,2-我想我不会向你买太多了!这个索引是多余的:键'IXS\U PRODUCT2PRODUCT\U PRODUCT\U ID`` PRODUCT\U ID`在哪里解释?谢谢你的评论。附上一份解释。我想我得花点时间把它改写成不相关的形式。目前,我不知道如何正确操作。这些“行”数字正确吗!?!您可以使用不相关的子查询来代替吗。小数点18,2-我想我不会向你买太多了!这个索引是多余的:键'IXS\U PRODUCT2PRODUCT\U PRODUCT\U ID`` PRODUCT\U ID`在哪里解释?谢谢你的评论。附上一份解释。我想我得花点时间把它改写成不相关的形式。目前,我不知道如何正确操作。这些“行”数字正确吗!?!非常感谢你!这似乎解决了问题,测试的执行时间减少了99%。不幸的是,代码中没有简单的修改方法,因为它是由网站引擎生成的。但至少现在我们知道了原因。非常感谢!这似乎解决了问题,测试的执行时间减少了99%。不幸的是,代码中没有简单的修改方法,因为它是由网站引擎生成的。但至少现在我们知道了原因。