我需要进行以下查询:
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()进行了分组,因为我需要将其添加到选择中而不将其添加到“ group by”中。我需要用于查询的相同列。
编辑:
答案 0 :(得分:1)
确保索引正确
create index idx1 on pvs( SERIAL);
和
create index idx2 on devices ( SERIAL);