簡體   English   中英

MySQL select 查詢非常慢

[英]MySQL select query is terribly slow

我有一張有 2 196 998 條記錄的表:

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 秒並返回 160 570。

但是查詢

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

即使我創建了兩個 idice,也需要 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:

創建復合索引后

CREATE INDEX idx_price_market_buy ON 價格(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上的過濾器(因此您希望此列在復合索引中的第一個 position 中),然后計算最大buy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM