gpt4 book ai didi

mysql - 有没有办法优化这个查询?在 MySQL 中加入多行

转载 作者:行者123 更新时间:2023-11-29 07:22:42 26 4
gpt4 key购买 nike

我需要做这个查询:

SELECT min(d.id) id, p.SERIAL serial, p.pos_id pos_id, MIN(fecha) fecha
FROM pvs p
JOIN devices d
ON d.SERIAL=p.SERIAL
GROUP BY p.SERIAL, p.pos_id
ORDER BY p.pos_id ASC;

问题是“pvs”是一个非常长的表,有超过 300 万行。这是我上传原始数据的表,但随后我尝试在工作数据库中获取这些元素的 ID(因此是 min(d.id) 部分)。这也是我没有在 pvs 的 pos_id 上添加外键的原因。

结构如下:

CREATE TABLE pvs (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`pos_id` INT(11) NOT NULL,
`estado` VARCHAR(255) NOT NULL COLLATE 'utf8mb4_unicode_ci',
`fecha` DATETIME NOT NULL,
`serial` VARCHAR(255) NOT NULL COLLATE 'utf8mb4_unicode_ci',
`created_at` TIMESTAMP NULL DEFAULT NULL,
`updated_at` TIMESTAMP NULL DEFAULT NULL
)

CREATE TABLE devices (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`serial` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`rotulo` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`code` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`cost_center` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`guia_recepcion` INT(11) NULL DEFAULT NULL,
`guia_reversa` INT(11) NULL DEFAULT NULL,
`pep` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`modified_by` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`modified_on` DATETIME NULL DEFAULT NULL,
`fecha_recepcion` DATETIME NULL DEFAULT NULL,
`fecha_instalacion` DATETIME NULL DEFAULT NULL,
`fecha_reversa` DATETIME NULL DEFAULT NULL,
`status_id` INT(10) UNSIGNED NOT NULL,
`location_id` VARCHAR(255) NOT NULL COLLATE 'utf8mb4_unicode_ci',
`customer_id` INT(10) UNSIGNED NOT NULL,
`str_id` INT(10) UNSIGNED NOT NULL,
`model_id` INT(10) UNSIGNED NOT NULL,
`pos_id` INT(11) NOT NULL,
`user_id` INT(10) UNSIGNED NOT NULL,
`technician_id` INT(10) UNSIGNED NOT NULL,
`created_at` TIMESTAMP NULL DEFAULT NULL,
`updated_at` TIMESTAMP NULL DEFAULT NULL,
`serial_prev` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`reversa_prev` DATETIME NULL DEFAULT NULL
)

我是否应该将 p.serial 设为外键,即使它是一个 varchar?如果我只是使用 p.pos_id 作为连接子句,“ids”是相同的。我将它与 min() 分组,因为我需要将它添加到选择中而不将其添加到“分组依据”。我需要相同的列来进行查询。

编辑:

The explain select

最佳答案

确保你有合适的索引

    create index  idx1 on pvs( SERIAL); 

    create index  idx2 on devices ( SERIAL); 

关于mysql - 有没有办法优化这个查询?在 MySQL 中加入多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55379936/

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