我有一个包含产品资产(13百万行)的mysql(innodb)的大表。这里是我的数据库的一个小模式:如何优化大表上的计数SQL查询
product <-many2one-- file_item --one2many--> family --many2one--> download_type
* file_item * table是一个包含数百万行的大表。我试着以计算下载类型的产品,下面的SQL查询:
select t.name as type,
count(p.product_id) as n
from file_item p
inner join family f on f.id = p.family_id
inner join type t on f.id_type = t.id
group by t.id order by t.name;
上有* file_item 3个指标*表:
- product_family_idx(产品,family_id)
- family_idx(family_id)
- product_idx(产品) 解释输出:
+----+-------------+-------+--------+-----------------------------------+---------+---------+-------------------+----------+---------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+--------+-----------------------------------+---------+---------+-------------------+----------+---------------------------------+ | 1 | SIMPLE | p | ALL | FAMILY_IDX,PRODUCT_FAMILY_IDX | NULL | NULL | NULL | 13862870 | Using temporary; Using filesort | | 1 | SIMPLE | f | eq_ref | PRIMARY,TYPE_ID | PRIMARY | 4 | MEDIA.p.FAMILY_IDX| 1 | | | 1 | SIMPLE | t | eq_ref | PRIMARY | PRIMARY | 4 | MEDIA.f.TYPE_ID | 1 | | +----+-------------+-------+--------+-----------------------------------+---------+---------+-------------------+----------+---------------------------------+
查询需要1个多小时才能返回结果。 请问我该如何优化查询?
表格索引是否正确?请提供具有索引和该查询的EXPLAIN的模式。谢谢! – Wiseguy
请给我们输出“解释;” –
@Wiseguy当然,我在文本中添加了索引。 – juliusdev