MySQL选择查询非常慢

阿列克谢·斯塔林斯基

我有一个带有2196998条记录的表:

CREATE TABLE price (
    dt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    marketId INT,
    buy DOUBLE,
    sell DOUBLE,
    PRIMARY KEY (dt, marketId),
    FOREIGN KEY fk_price_market(marketId) REFERENCES market(id) ON UPDATE CASCADE ON DELETE CASCADE
)  ENGINE=INNODB;

查询

select max(buy) from price;

需要1.92秒,这是一个合理的时间,如果我在“购买”列上创建索引,则需要0.00秒:

CREATE INDEX idx_price_buy ON price (buy);

和查询

select count(*) from price where marketId=309;

花费0.05秒并返回160570。

但是查询

select max(buy) from price where marketId=309;

即使我创建了两个示例,也要花费15.49秒(这是非常大的):

CREATE INDEX idx_price_market ON price (marketId);
CREATE INDEX idx_price_buy ON price (buy);

(我不确定,但是可能索引idx_price_market已经存在,因为marketId外键约束中需要列)

1)有没有优化的方法?

2)如果否,那么其他数据库呢?他们表现更好吗?

编辑1:

创建复合索引后

创建索引idx_price_market_buy开价(marketId,买入);

查询需要0.00秒。

desc select max(buy) from price where marketId=309;
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+------------------------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra                        |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+------------------------------+
|  1 | SIMPLE      | NULL  | NULL       | NULL | NULL          | NULL | NULL    | NULL | NULL |     NULL | Select tables optimized away |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+------------------------------+
1 row in set, 1 warning (0.01 sec)
专线小巴
select max(buy) from price where marketId=309;

在每一列上创建单独的索引可能不允许MySQL优化查询。

对于此查询,你想有一个复合索引(marketId, buy)

create index idx_price_market_buy ON price (marketId, buy);

索引中各列的顺序很重要:首先对查询进行过滤marketId(因此,您希望此列位于相关索引的第一个位置),然后计算最大值buy

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL非常慢的查询

来自分类Dev

MYSQL(NOT IN)查询非常慢

来自分类Dev

从2个表中选择时MySQL查询非常慢

来自分类Dev

MySQL子查询非常慢

来自分类Dev

MySQL查询运行非常慢

来自分类Dev

非常非常慢的查询

来自分类Dev

MYSQL查询执行速度非常慢

来自分类Dev

使用OR子句的MySQL JOIN查询非常慢

来自分类Dev

MySQL非常慢的子查询优化

来自分类Dev

使用OR子句的MySQL JOIN查询非常慢

来自分类Dev

MySQL查询联接语句非常慢

来自分类Dev

MySQL大表-查询非常慢

来自分类Dev

Mysql嵌套查询速度非常慢

来自分类Dev

与没有索引的选择查询相比,MySQL中的Update-join非常慢

来自分类Dev

MySQL选择具有多个多对多联接,导致查询速度非常慢

来自分类Dev

使用WHERE IN进行选择和子查询非常慢

来自分类Dev

回溯查询非常慢

来自分类Dev

PostgreSQL查询非常慢

来自分类Dev

SSIS查询非常慢

来自分类Dev

加快非常慢的查询

来自分类Dev

查询动作非常慢

来自分类Dev

在 MySQL 中按日期时间范围选择非常慢

来自分类Dev

读取订单非常慢的mysql查询(联接和分组依据)

来自分类Dev

试图找到导致LEFT JOIN MySQL查询非常慢的原因

来自分类Dev

MySQL查询返回无效行并且非常慢

来自分类Dev

迁移到mysql 5.7后查询非常慢

来自分类Dev

对于某些参数,SQL查询非常慢(MySQL)

来自分类Dev

Mysql表更新查询非常慢,并且每天都在增加

来自分类Dev

使用where子句时,mysql select查询非常慢