gpt4 book ai didi

mysql - 使用 ~4Gb 表 (MariaDB) 的简单 SELECT 查询很慢

转载 作者:行者123 更新时间:2023-12-04 08:09:49 24 4
gpt4 key购买 nike

我有一张 table 叫 tablename具有以下结构:

 CREATE TABLE `tablename` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) unsigned NOT NULL,
`type` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`data` longtext COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `tablename_user_id_foreign` (`user_id`),
CONSTRAINT `tablename_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=11271577 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
此表的当前大小为 4.1Gb目前,我希望它变得更大。
我正在运行一个相当简单的 SQL SELECT查询看起来像:
SELECT `type`, `data`, `created_at`
FROM `tablename`
WHERE `type` = 'PURCHASE'
ORDER BY `created_at` DESC
LIMIT 1
本质上,我们只希望返回 (并且没有更多)此数据库中的最新行(类型 PURCHASE )。此表中的大多数数据都不是 PURCHASE 类型的.
在具有 4gb RAM 的生产数据库上,可以看到此查询需要长达 1 分 1 秒(这似乎太长了)。
SELECT `type`, `data`, `created_at`
FROM `tablename`
WHERE `type` = 'PURCHASE'
ORDER BY `created_at` DESC
LIMIT 1;
/* Affected rows: 0 Found rows: 1 Warnings: 0 Duration for 1 query: 00:01:01.8 */
在其他运行中(同一个盒子,同一个服务器),我看到它在 27 seconds 之间花费了和 36.48秒。
如果可能的话,我希望最多看到几秒钟。
MariaDB 的版本为 10.3.27(在具有 4Gb RAM 和“通用 (SSD) 卷”的 *nix 虚拟云实例上运行)。这是正常的吗?可以做些什么来加速这个查询?瓶颈是否主要与 RAM 或磁盘速度或其他方面有关?
可能值得注意的是,在此 SELECT 的同时,许多新记录正在写入/插入到同一张表中。语句很可能正在执行,所以这可能会减慢速度(等待 INSERT 语句可能完成)。

最佳答案

对于此查询:

SELECT `type`, `data`, `created_at`
FROM `tablename`
WHERE `type` = 'PURCHASE'
ORDER BY `created_at` DESC
LIMIT 1;
你想要一个关于 tablename(type, created_at desc) 的索引.

关于mysql - 使用 ~4Gb 表 (MariaDB) 的简单 SELECT 查询很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66038492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com