我在产品表上有以下索引:(product_t,productid,forsale)。MySQL手册说:
GROUP BY 只命名构成索引最左前缀的列,而不命名其他列。 http://dev.mysql.com/doc/refman/5.0/en/group-by-optimization.html
当我执行以下查询时
SELECT z.product_t, COUNT(z.productid)
FROM xcart_products z
JOIN xcart_products_lng w ON z.productid = w.productid
AND w.code = 'US'
WHERE z.forsale = 'Y'
group by z.product_t
因此使用最左边的索引字段(product_t),执行时间仍然很长:
+-----------+--------------------+
| product_t | COUNT(z.productid) |
+-----------+--------------------+
| B | 4 |
| C | 10521 |
| D | 1 |
| F | 16 |
| G | 363 |
| J | 16 |
| L | 749 |
| M | 22 |
| O | 279 |
| P | 5304 |
| S | 22 |
| W | 662 |
+-----------+--------------------+
12 rows in set (0.81 sec)
当我使用整个索引(product_t、productid、forsale)时,执行时间非常快(0.005 秒)。我应该如何更改它以使查询更快?
我认为可以通过使用半连接以某种方式改进查询...但是我不确定如何...