MySQL查询运行非常慢。
表中有1000000行。我在问题中添加了解释查询。这需要10-11秒。我有多个条件会不断变化,而用户的输入会不断变化。是否可以提供唯一索引。
解释查询
id -1
select_type -SIMPLE
表-卖家
输入-ref
Possible_keys -quarter,quarter_2,comp_idx1,index_all,qc
键-qc
key_len -32
ref -const
行-399782
额外-在哪里使用
SELECT `cm`,
`week`,
`quarter`,
SUM( `gmv`) as gmv,
SUM( `qty_sold`) as qty_sold,
SUM( `live_listing`) as live_listing ,
SUM( `txn`) as txn,
SUM( `new_listings`) as new_listings,
SUM( `ended_listings`) as ended_listings
FROM `sellers`
where quarter=:quarter and
category=:category
group by cm
CREATE TABLE `sellers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`seller_id` varchar(20) NOT NULL,
`am` varchar(30) NOT NULL,
`rm` varchar(30) NOT NULL,
`cm` varchar(30) NOT NULL,
`week` varchar(10) NOT NULL,
`quarter` varchar(10) NOT NULL,
`site` varchar(20) NOT NULL,
`category` varchar(20) NOT NULL,
`format` varchar(20) NOT NULL,
`price_band` varchar(20) NOT NULL,
`gmv` double(11,2) NOT NULL,
`qty_sold` int(11) NOT NULL,
`live_listing` int(11) NOT NULL,
`txn` int(11) NOT NULL,
`new_listings` int(11) NOT NULL,
`ended_listings` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `seller_id` (`seller_id`),
KEY `quarter` (`quarter`),
KEY `week` (`week`),
KEY `id` (`id`),
KEY `category` (`category`),
KEY `site` (`site`),
KEY `cm` (`cm`),
KEY `rm` (`rm`),
KEY `am` (`am`)
) ENGINE=InnoDB AUTO_INCREMENT=1692618 DEFAULT CHARSET=utf8
答案 0 :(得分:0)
您可以在“ cm”列中添加索引。它将比以前更快
答案 1 :(得分:0)
在特定查询中,MySQL一次只能使用一个索引。就您而言,您需要检查多个列。您需要在(quarter, category, cm)
上添加一个综合索引,以提高性能:
ALTER TABLE sellers
ADD INDEX comp_idx1(quarter, category, cm);