MyISAM 查询始终至少 100 毫秒

问题描述 投票:0回答:1

我有一些旧软件在 Mariadb 10.6 上使用 MyISAM 表

当我检查查询摘要时,我总是看到执行时间从 100 毫秒开始。

这里可能出了什么问题?

Innodb 表显示时间较短。

这个用于对小表(30k 条记录以下)进行简单的 count(*) 查询:

# Query 2: 0.31 QPS, 0.03x concurrency, ID 0x56EB9978318FA6C3A68FEFD174701A51 at byte 0
# This item is included in the report because it matches --limit.
# Scores: V/M = 0.00
# Time range: 2024-02-07T07:00:07 to 2024-02-07T07:19:50
# Attribute    pct   total     min     max     avg     95%  stddev  median
# ============ === ======= ======= ======= ======= ======= ======= =======
# Count          9     369
# Exec time      8     37s   100ms   202ms   101ms   100ms     9ms   100ms
# Lock time      0       0       0       0       0       0       0       0
# Query size     3  32.65k      89      94   90.60   92.72    1.15   88.31
mysql mariadb myisam
1个回答
0
投票

我怀疑您的小型 30K 行 MyISAM 表上没有索引。由于行计数[我认为]存储在不存在的 .MYI

 文件中,因此它必须读取数据来计算行数。

对于几乎所有简单的事情,InnoDB 都比 MyISAM 慢

SELECT COUNT(*) FROM tbl

可能其他一些活动的桌子上有

LOCK

。这会减慢许多操作的速度。 (InnoDB 允许并发访问表,因此在许多情况下速度更快。)

为什么只有100ms?

long_query_time

 是否设置为 0.1(秒)?如果是这样,也许只有几个
SELECTs
碰巧才勉强达到 100 毫秒。 
COUNT
 运行了多少次?

如果 Query_cache 实际上给这个讨论带来了麻烦。请参阅

query_cache_type

query_cache_size

对于 MyISAM 或 InnoDB,数据和索引都不会“保留在内存中”。在所有组合中,字节都以类似于“最近最少使用”的方式进行“缓存”。 (如果有足够的 RAM,所有内容都将缓存在 RAM 中。)

© www.soinside.com 2019 - 2024. All rights reserved.