MySQL忽略了索引问题
在最近对我们网站的MySQL v5.5监控过程中,我们发现它经常会生成如此繁重的查询: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
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%。不幸的是,代码中没有简单的修改方法,因为它是由网站引擎生成的。但至少现在我们知道了原因。