当我添加从JOINED表派生的ORDER BY时,执行查询的时间从0.008秒上升到0.50秒,这虽然在order by字段上有一个索引。以下是查询:
SELECT a.productid
FROM products a
JOIN products_lng b FORCE INDEX (primary)
ON a.productid = b.productid
AND b.code = 'US'
JOIN pricing c
ON c.productid = a.productid
JOIN thumbnails d
ON d.productid = a.productid
JOIN bigthumbnails e
ON e.productid = a.productid
JOIN products_categories f
ON f.productid = a.productid
WHERE a.forsale = 'Y'
GROUP BY b.productid
ORDER BY b.product
解释计划:
b具有以下索引:
CREATE TABLE `products_lng` (
`code` varchar(2) CHARACTER SET latin1 NOT NULL DEFAULT '',
`productid` int(11) NOT NULL DEFAULT '0',
`product` varchar(255) CHARACTER SET latin1 NOT NULL DEFAULT '',
`descr` varchar(512) CHARACTER SET latin1 NOT NULL,
`full_descr` varchar(1024) CHARACTER SET latin1 NOT NULL,
`processed` varchar(1) CHARACTER SET latin1 NOT NULL,
PRIMARY KEY (`code`,`productid`,`product`),
KEY `ad` (`code`,`productid`,`product`,`descr`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin
答案 0 :(得分:0)
最后,看起来ORDER BY和GROUP BY的组合是查询执行时间超过正常的原因。然而,通过将查询放在子查询中并因此将ORDER BY和GROUP BY分开,我设法将执行时间大幅限制为0.0015秒而不是原始的0.5秒。我仍然需要根据我的要求调整查询,但以下是它应该是什么样子。基本上,它归结为在子查询中定义WHERE参数和周围查询要选择的值。
SELECT z.*,d.*,e.*
FROM products_lng z
JOIN thumbnails d ON d.productid = z.productid
JOIN bigthumbnails e ON e.productid = z.productid
WHERE EXISTS
( SELECT b.productid
FROM products b
JOIN pricing c ON c.productid = b.productid
JOIN products_lng i USE INDEX (PRIMARY) ON i.productid = b.productid
AND i.code = 'US'
JOIN products_categories f ON f.productid = b.productid
WHERE b.productid = z.productid
GROUP BY b.productid )
ORDER BY z.product