gpt4 book ai didi

mysql - SQL 查询 - 大量连接 -

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:50 25 4
gpt4 key购买 nike

我有一个 SQL 查询,用于从不同表中提取零件详细信息和配件数据的数据。不幸的是,表格的布局方式似乎需要大量的 JOIN。我目前有以下查询并通过 phpmyadmin 运行它只显示一个加载屏幕,所以我想它超时并且不会在生产中工作。

我已经在连接的表和列上添加了索引。我已经通过 phpmyadmin 优化了数据库,但我仍然对应该或可以如何完成这件事感到困惑。我是否必须拆分查询并将它们与 UNION 合并?如果是这样,我什至不确定它如何与此一起工作,或者它是否会起作用。

请帮忙。 :-)

EXPLAIN SELECT Import_Values.base_vehicle_id,
Import_Values.qty,
Import_Values.part_type_id,
Import_Values.part_id,
Import_Values.position_id,
Import_Values.note,
Parts.partterminologyname,
BaseVehicle.YearID,
Make.MakeName,
Model.modelname,
SubModel.SubModelName,
EngineDesignation.EngineDesignationName,
EngineVIN.EngineVINName,
EngineBase.Liter,
EngineBase.CC,
EngineBase.CID,
EngineBase.Cylinders,
EngineBase.BlockType,
EngineBase.EngBoreIn,
EngineBase.EngBoreMetric,
EngineBase.EngStrokeIn,
EngineBase.EngStrokeMetric,
FuelDeliveryType.FuelDeliveryTypeName,
FuelDeliverySubType.FuelDeliverySubTypeName,
FuelSystemControlType.FuelSystemControlTypeName,
FuelSystemDesign.FuelSystemDesignName,
Aspiration.AspirationName,
CylinderHeadType.CylinderHeadTypeName,
FuelType.FuelTypeName,
IgnitionSystemType.IgnitionSystemTypeName,
Mfr.MfrName,
EngineVersion.EngineVersion,
Valves.ValvesPerEngine,
BedLength.BedLength,
BedLength.BedLengthMetric,
BedType.BedTypeName
FROM
Import_Values
INNER JOIN BaseVehicle
ON Import_Values.base_vehicle_id=BaseVehicle.BaseVehicleID
INNER JOIN Parts
ON Import_Values.part_type_id=Parts.PartTerminologyID
INNER JOIN Make
ON BaseVehicle.MakeID=Make.MakeID
INNER JOIN Model
ON BaseVehicle.ModelID=Model.ModelID
INNER JOIN Vehicle
ON Import_Values.base_vehicle_id=Vehicle.BaseVehicleID
INNER JOIN SubModel
ON Vehicle.SubModelID=SubModel.SubModelID
INNER JOIN VehicleToEngineConfig
ON Vehicle.VehicleID=VehicleToEngineConfig.VehicleID
INNER JOIN EngineConfig
ON VehicleToEngineConfig.EngineConfigID=EngineConfig.EngineConfigID
INNER JOIN EngineDesignation
ON EngineConfig.EngineDesignationID=EngineDesignation.EngineDesignationID
INNER JOIN EngineVIN
ON EngineConfig.EngineVINID=EngineVIN.EngineVINID
INNER JOIN EngineBase
ON EngineConfig.EngineBaseID=EngineBase.EngineBaseID
INNER JOIN FuelDeliveryConfig
ON EngineConfig.FuelDeliveryConfigID=FuelDeliveryConfig.FuelDeliveryConfigID
INNER JOIN FuelDeliveryType
ON FuelDeliveryConfig.FuelDeliveryTypeID=FuelDeliveryType.FuelDeliveryTypeID
INNER JOIN FuelDeliverySubType
ON FuelDeliveryConfig.FuelDeliverySubTypeID=FuelDeliverySubType.FuelDeliverySubTypeID
INNER JOIN FuelSystemControlType
ON FuelDeliveryConfig.FuelSystemControlTypeID=FuelSystemControlType.FuelSystemControlTypeID
INNER JOIN FuelSystemDesign
ON FuelDeliveryConfig.FuelSystemDesignID=FuelSystemDesign.FuelSystemDesignID
INNER JOIN Aspiration
ON EngineConfig.AspirationID=Aspiration.AspirationID
INNER JOIN CylinderHeadType
ON EngineConfig.CylinderHeadTypeID=CylinderHeadType.CylinderHeadTypeID
INNER JOIN FuelType
ON EngineConfig.FuelTypeID=FuelType.FuelTypeID
INNER JOIN IgnitionSystemType
ON EngineConfig.IgnitionSystemTypeID=IgnitionSystemType.IgnitionSystemTypeID
INNER JOIN Mfr
ON EngineConfig.EngineMfrID=Mfr.MfrID
INNER JOIN EngineVersion
ON EngineConfig.EngineVersionID=EngineVersion.EngineVersionID
INNER JOIN Valves
ON EngineConfig.ValvesID=Valves.Valvesid
INNER JOIN VehicleToBedConfig
ON Vehicle.VehicleID=VehicleToBedConfig.VehicleID
INNER JOIN BedConfig
ON VehicleToBedConfig.BedConfigID=BedConfig.BedConfigID
INNER JOIN BedLength
ON BedConfig.BedLengthID=BedLength.BedLengthID
INNER JOIN BedType
ON BedConfig.BedTypeID=BedType.BedTypeID

最佳答案

数据库设计很好。这是规范化的一个例子。据我所知,表和列的名称都很好。我假设每个表上的 id 是一个主键,它会有一个索引。查询应该非常快,除非有大量数据(相对于可用内存)。

您的一些表暗示多对多关系。一种可能是查询正在创建来自不同维度(在车辆内)的行的笛卡尔乘积,该乘积正在乘以行。例如,每辆车可能有多个 parts 和多个 EngineConfig(这纯粹是一个例子的猜测),因此 100 个零件和 20 个配置将产生 2,000 行。

要对此进行调试,请从顶部开始并向下工作:

select *
FROM Import_Values INNER JOIN
BaseVehicle
ON Import_Values.base_vehicle_id=BaseVehicle.BaseVehicleID

查看结果并确保您得到了您期望的 -- 而不是更多。然后继续一次添加一个联接,直到您发现问题(性能或行数过多)。

关于mysql - SQL 查询 - 大量连接 -,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17789097/

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