【发布时间】:2021-06-18 21:04:51
【问题描述】:
我有 2 个表,一个关键字表和一个关键字位置表
关键词结构
CREATE TABLE `keywords`
(
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`keyword` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci;
keyword_positions 结构
CREATE TABLE `keyword_positions`
(
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`keyword_id` bigint(20) UNSIGNED NOT NULL,
`position` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci;
这就是我执行选择的方式
SELECT `keywords`.*,
kp.position AS kp_position
FROM `keywords`
LEFT JOIN `keyword_positions` AS `kp`
ON `kp`.`keyword_id` = `keywords`.`id`
AND `kp`.`id` =
(SELECT MAX(ikp.id)
FROM keyword_positions AS ikp
WHERE keywords.id = ikp.keyword_id)
这个查询可以进一步优化吗?它运行大约 800 毫秒
【问题讨论】:
-
没有索引?
-
两个 id 都是唯一的并且自动递增,更新我的问题,谢谢
-
职位有单独表格的原因是什么?
-
我有很多职位,每天一个
标签: mysql greatest-n-per-group mariadb-10.5