Mysql 使用128GB内存进行查询
我一直在努力处理一个大型查询,但我还没有成功运行过一次。每次我运行它时,它都会意外地显示“Killed”。最后,在研究它之后,我发现在进程终止和内存恢复正常之前,内存使用量在大约20-30分钟内从10GB增加到128GB 解释选择结果 查询本身可以在此处看到:Mysql 使用128GB内存进行查询,mysql,Mysql,我一直在努力处理一个大型查询,但我还没有成功运行过一次。每次我运行它时,它都会意外地显示“Killed”。最后,在研究它之后,我发现在进程终止和内存恢复正常之前,内存使用量在大约20-30分钟内从10GB增加到128GB 解释选择结果 查询本身可以在此处看到: SELECT Import_AcesApplication_New.sku, Import_AcesApplication_New.notes, Parts.partterminologyname, BaseVehicle.YearID,
SELECT
Import_AcesApplication_New.sku,
Import_AcesApplication_New.notes,
Parts.partterminologyname,
BaseVehicle.YearID,
Make.MakeName,
Model.modelname,
Submodel.SubmodelName,
CONCAT(EngineBase.Cylinders, ' Cyl ', EngineBase.Liter, 'L') as engine,
Positions.position,
BedLength.BedLength,
BedLength.BedLengthMetric,
BedType.BedTypeName,
BodyNumDoors.BodyNumDoors,
BodyType.BodyTypeName,
FrontBrakeType.BrakeTypeName,
RearBrakeType.BrakeTypeName,
BrakeSystem.BrakeSystemName,
BrakeABS.BrakeABSName,
DriveType.DriveTypeName,
EngineDesignation.EngineDesignationName,
EngineVIN.EngineVINName,
Valves.ValvesPerEngine,
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,
EngineMfr.MfrName,
EngineVersion.EngineVersion,
PowerOutput.HorsePower,
PowerOutput.KilowattPower,
SpringType.SpringTypeName,
SteeringType.SteeringTypeName,
SteeringSystem.SteeringSystemName,
TransmissionType.TransmissionTypeName,
TransmissionNumSpeeds.TransmissionNumSpeeds,
TransmissionMfrCode.TransmissionMfrCode,
TransElecControlled.ElecControlled,
TransmissionMfr.MfrName,
WheelBase.WheelBase,
WheelBase.WheelBaseMetric,
VehicleType.VehicleTypeName,
VehicleTypeGroup.VehicleTypeGroupName
FROM
Import_AcesApplication_New
STRAIGHT_JOIN BaseVehicle ON Import_AcesApplication_New.base_vehicle_id=BaseVehicle.BaseVehicleID
STRAIGHT_JOIN Parts ON Import_AcesApplication_New.part_type_id=Parts.PartTerminologyID
STRAIGHT_JOIN Make ON BaseVehicle.MakeID=Make.MakeID
STRAIGHT_JOIN Model ON BaseVehicle.ModelID=Model.ModelID
STRAIGHT_JOIN Vehicle ON Import_AcesApplication_New.base_vehicle_id=Vehicle.BaseVehicleID
STRAIGHT_JOIN Submodel ON Vehicle.SubmodelID=Submodel.SubmodelID
STRAIGHT_JOIN VehicleToBedConfig ON Vehicle.VehicleID=VehicleToBedConfig.VehicleID
STRAIGHT_JOIN VehicleToBodyStyleConfig ON Vehicle.VehicleID=VehicleToBodyStyleConfig.VehicleID
STRAIGHT_JOIN VehicleToBrakeConfig ON Vehicle.VehicleID=VehicleToBrakeConfig.VehicleID
STRAIGHT_JOIN VehicleToDriveType ON Vehicle.VehicleID=VehicleToDriveType.VehicleID
STRAIGHT_JOIN VehicleToEngineConfig ON Vehicle.VehicleID=VehicleToEngineConfig.VehicleID
STRAIGHT_JOIN VehicleToSpringTypeConfig ON Vehicle.VehicleID=VehicleToSpringTypeConfig.VehicleID
STRAIGHT_JOIN VehicleToSteeringConfig ON Vehicle.VehicleID=VehicleToSteeringConfig.VehicleID
STRAIGHT_JOIN VehicleToTransmission ON Vehicle.VehicleID=VehicleToTransmission.VehicleID
STRAIGHT_JOIN VehicleToWheelbase ON Vehicle.VehicleID=VehicleToWheelbase.VehicleID
STRAIGHT_JOIN EngineConfig ON VehicleToEngineConfig.EngineConfigID=EngineConfig.EngineConfigID
STRAIGHT_JOIN EngineBase ON EngineConfig.EngineBaseID=EngineBase.EngineBaseID
STRAIGHT_JOIN Positions ON Import_AcesApplication_New.position_id=Positions.PositionID
STRAIGHT_JOIN BedConfig ON VehicleToBedConfig.BedConfigID=BedConfig.BedConfigID
STRAIGHT_JOIN BedLength ON BedConfig.BedLengthID=BedLength.BedLengthID
STRAIGHT_JOIN BedType ON BedConfig.BedTypeID=BedType.BedTypeID
STRAIGHT_JOIN BodyStyleConfig ON VehicleToBodyStyleConfig.BodyStyleConfigID=BodyStyleConfig.BodyStyleConfigID
STRAIGHT_JOIN BodyNumDoors ON BodyStyleConfig.BodyNumDoorsID=BodyNumDoors.BodyNumDoorsID
STRAIGHT_JOIN BodyType ON BodyStyleConfig.BodyTypeID=BodyType.BodyTypeID
STRAIGHT_JOIN BrakeConfig ON VehicleToBrakeConfig.BrakeConfigID=BrakeConfig.BrakeConfigID
STRAIGHT_JOIN BrakeType FrontBrakeType ON BrakeConfig.FrontBrakeTypeID=FrontBrakeType.BrakeTypeID
STRAIGHT_JOIN BrakeType RearBrakeType ON BrakeConfig.RearBrakeTypeID=RearBrakeType.BrakeTypeID
STRAIGHT_JOIN BrakeSystem ON BrakeConfig.BrakeSystemID=BrakeSystem.BrakeSystemID
STRAIGHT_JOIN BrakeABS ON BrakeConfig.BrakeABSID=BrakeABS.BrakeABSID
STRAIGHT_JOIN DriveType ON VehicleToDriveType.DriveTypeID=DriveType.DriveTypeID
STRAIGHT_JOIN EngineDesignation ON EngineConfig.EngineDesignationID=EngineDesignation.EngineDesignationID
STRAIGHT_JOIN EngineVIN ON EngineConfig.EngineVINID=EngineVIN.EngineVINID
STRAIGHT_JOIN Valves ON EngineConfig.ValvesID=Valves.Valvesid
STRAIGHT_JOIN FuelDeliveryConfig ON EngineConfig.FuelDeliveryConfigID=FuelDeliveryConfig.FuelDeliveryConfigID
STRAIGHT_JOIN FuelDeliveryType ON FuelDeliveryConfig.FuelDeliveryTypeID=FuelDeliveryType.FuelDeliveryTypeID
STRAIGHT_JOIN FuelDeliverySubType ON FuelDeliveryConfig.FuelDeliverySubTypeID=FuelDeliverySubType.FuelDeliverySubTypeID
STRAIGHT_JOIN FuelSystemControlType ON FuelDeliveryConfig.FuelSystemControlTypeID=FuelSystemControlType.FuelSystemControlTypeID
STRAIGHT_JOIN FuelSystemDesign ON FuelDeliveryConfig.FuelSystemDesignID=FuelSystemDesign.FuelSystemDesignID
STRAIGHT_JOIN Aspiration ON EngineConfig.AspirationID=Aspiration.AspirationID
STRAIGHT_JOIN CylinderHeadType ON EngineConfig.CylinderHeadTypeID=CylinderHeadType.CylinderHeadTypeID
STRAIGHT_JOIN FuelType ON EngineConfig.FuelTypeID=FuelType.FuelTypeID
STRAIGHT_JOIN IgnitionSystemType ON EngineConfig.IgnitionSystemTypeID=IgnitionSystemType.IgnitionSystemTypeID
STRAIGHT_JOIN Mfr EngineMfr ON EngineConfig.EngineMfrID=EngineMfr.MfrID
STRAIGHT_JOIN EngineVersion ON EngineConfig.EngineVersionID=EngineVersion.EngineVersionID
STRAIGHT_JOIN PowerOutput ON EngineConfig.PowerOutputId=PowerOutput.PowerOutputId
STRAIGHT_JOIN SpringType ON VehicleToSpringTypeConfig.SpringTypeConfigID=SpringType.SpringTypeID
STRAIGHT_JOIN SteeringConfig ON VehicleToSteeringConfig.SteeringConfigID=SteeringConfig.SteeringConfigID
STRAIGHT_JOIN SteeringType ON SteeringConfig.SteeringConfigID=SteeringType.SteeringTypeID
STRAIGHT_JOIN SteeringSystem ON SteeringConfig.SteeringSystemID=SteeringSystem.SteeringSystemID
STRAIGHT_JOIN Transmission ON VehicleToTransmission.TransmissionID=Transmission.TransmissionID
STRAIGHT_JOIN TransmissionBase ON Transmission.TransmissionBaseID=TransmissionBase.TransmissionBaseID
STRAIGHT_JOIN TransmissionType ON TransmissionBase.TransmissionTypeID=TransmissionType.TransmissionTypeID
STRAIGHT_JOIN TransmissionNumSpeeds ON TransmissionBase.TransmissionNumSpeedsID=TransmissionNumSpeeds.TransmissionNumSpeedsID
STRAIGHT_JOIN TransmissionControlType ON TransmissionBase.TransmissionControlTypeID=TransmissionControlType.TransmissionControlTypeID
STRAIGHT_JOIN TransmissionMfrCode ON Transmission.TransmissionMfrCodeID=TransmissionMfrCode.TransmissionMfrCodeID
STRAIGHT_JOIN ElecControlled TransElecControlled ON Transmission.TransmissionElecControlledID=TransElecControlled.ElecControlledID
STRAIGHT_JOIN Mfr TransmissionMfr ON Transmission.TransmissionMfrID=TransmissionMfr.MfrID
STRAIGHT_JOIN WheelBase ON VehicleToWheelbase.WheelbaseID=WheelBase.WheelBaseID
STRAIGHT_JOIN VehicleType ON Model.VehicleTypeID=VehicleType.VehicleTypeID
STRAIGHT_JOIN VehicleTypeGroup ON VehicleType.VehicleTypeGroupId=VehicleTypeGroup.VehicleTypeGroupId
我能做些什么来优化查询,使其在完成时不会占用超过100GB的数据
谢谢 我将考虑使用一个表来保存您需要的结果,并通过许多步骤填充 例如,对于make和model的简化导入表和查找表:
create table imp( sku int, notes varchar(20), make_id int, model_id int ) ;
create table make ( id int, make_name varchar(20) ) ;
create table model ( id int, model_name varchar(20) ) ;
为我们的结果创建一个表:
create table res( sku int,
notes varchar(20),
make varchar(20),
model varchar(20)
);
插入一些示例数据:
insert into imp values
( 1, 'blue ford focus', 2, 3 ),
( 2,'green audi a4', 1, 2 ),
( 3,'black audi a3', 1, 1 );
insert into make values( 1, 'audi'), (2,'ford');
insert into model values( 1, 'a3'), (2,'a4'), (3,'focus');
现在获取我们感兴趣的所有导入数据
insert into res ( sku, notes ) select sku,notes from imp;
定做
update res
join imp on res.sku = imp.sku
join make on imp.make_id = make.id
set res.make = make.make_name ;
模型呢
update res
join imp on res.sku = imp.sku
join model on imp.model_id = model.id
set res.model = model.model_name;
现在得到我们想要的结果
select * from res;
使用类似的技术,您可以将查询分解为几个查询,每个查询都将运行
在上述示例中,您可能希望将索引添加到结果表sku中的任何相关字段中对于每辆车的所有不同模型、子模型和设备,您似乎得到了笛卡尔结果。你能做一个测试,在一个导入应用程序的最末端添加一个WHERE子句吗?New.base\u vehicle\u id,看看返回了多少条记录 然后,为我们统计导入应用程序新表中的总记录数。从所有表中获取计数可能会更好,因为这显然会阻塞您的服务器 同时,我正在尝试处理查询,并将返回到更易于管理的部分。。。但是在查询的顶部只需要一次直接连接,其余的都是普通连接
select STRAIGHT_JOIN
fields, fields, fields
from
yourTables
JOIN Other Tables on ...
另外,在您最初回答的问题中,我最初建议使用直接连接,我还建议覆盖所有表的索引。你创建了那些索引吗
好的,还有更多要细细咀嚼。。。我重写了您的查询,只是改变了连接的顺序,以显示子组件之间的相关性
SELECT STRAIGHT_JOIN
IAN.sku,
IAN.notes,
Parts.partterminologyname,
BaseVehicle.YearID,
Make.MakeName,
Model.modelname,
Submodel.SubmodelName,
CONCAT(EngineBase.Cylinders, ' Cyl ', EngineBase.Liter, 'L') as engine,
Positions.position,
BedLength.BedLength,
BedLength.BedLengthMetric,
BedType.BedTypeName,
BodyNumDoors.BodyNumDoors,
BodyType.BodyTypeName,
FrontBrakeType.BrakeTypeName,
RearBrakeType.BrakeTypeName,
BrakeSystem.BrakeSystemName,
BrakeABS.BrakeABSName,
DriveType.DriveTypeName,
EngineDesignation.EngineDesignationName,
EngineVIN.EngineVINName,
Valves.ValvesPerEngine,
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,
EngineMfr.MfrName,
EngineVersion.EngineVersion,
PowerOutput.HorsePower,
PowerOutput.KilowattPower,
SpringType.SpringTypeName,
SteeringType.SteeringTypeName,
SteeringSystem.SteeringSystemName,
TransmissionType.TransmissionTypeName,
TransmissionNumSpeeds.TransmissionNumSpeeds,
TransmissionMfrCode.TransmissionMfrCode,
TransElecControlled.ElecControlled,
TransmissionMfr.MfrName,
WheelBase.WheelBase,
WheelBase.WheelBaseMetric,
VehicleType.VehicleTypeName,
VehicleTypeGroup.VehicleTypeGroupName
FROM
Import_AcesApplication_New IAN
JOIN BaseVehicle
ON IAN.base_vehicle_id = BaseVehicle.BaseVehicleID
JOIN Make
ON BaseVehicle.MakeID = Make.MakeID
JOIN Model
ON BaseVehicle.ModelID = Model.ModelID
JOIN VehicleType
ON Model.VehicleTypeID = VehicleType.VehicleTypeID
JOIN VehicleTypeGroup
ON VehicleType.VehicleTypeGroupId = VehicleTypeGroup.VehicleTypeGroupId
JOIN Parts
ON IAN.part_type_id = Parts.PartTerminologyID
JOIN Vehicle
ON IAN.base_vehicle_id = Vehicle.BaseVehicleID
JOIN Submodel
ON Vehicle.SubmodelID = Submodel.SubmodelID
JOIN VehicleToBedConfig
ON Vehicle.VehicleID = VehicleToBedConfig.VehicleID
JOIN BedConfig
ON VehicleToBedConfig.BedConfigID = BedConfig.BedConfigID
JOIN BedLength
ON BedConfig.BedLengthID = BedLength.BedLengthID
JOIN BedType
ON BedConfig.BedTypeID = BedType.BedTypeID
JOIN VehicleToBodyStyleConfig
ON Vehicle.VehicleID = VehicleToBodyStyleConfig.VehicleID
JOIN BodyStyleConfig
ON VehicleToBodyStyleConfig.BodyStyleConfigID = BodyStyleConfig.BodyStyleConfigID
JOIN BodyNumDoors
ON BodyStyleConfig.BodyNumDoorsID = BodyNumDoors.BodyNumDoorsID
JOIN BodyType
ON BodyStyleConfig.BodyTypeID = BodyType.BodyTypeID
JOIN VehicleToBrakeConfig
ON Vehicle.VehicleID = VehicleToBrakeConfig.VehicleID
JOIN BrakeConfig
ON VehicleToBrakeConfig.BrakeConfigID = BrakeConfig.BrakeConfigID
JOIN BrakeType FrontBrakeType
ON BrakeConfig.FrontBrakeTypeID = FrontBrakeType.BrakeTypeID
JOIN BrakeType RearBrakeType
ON BrakeConfig.RearBrakeTypeID = RearBrakeType.BrakeTypeID
JOIN BrakeSystem
ON BrakeConfig.BrakeSystemID = BrakeSystem.BrakeSystemID
JOIN BrakeABS
ON BrakeConfig.BrakeABSID = BrakeABS.BrakeABSID
JOIN VehicleToDriveType
ON Vehicle.VehicleID = VehicleToDriveType.VehicleID
JOIN DriveType
ON VehicleToDriveType.DriveTypeID = DriveType.DriveTypeID
JOIN VehicleToEngineConfig
ON Vehicle.VehicleID = VehicleToEngineConfig.VehicleID
JOIN EngineConfig
ON VehicleToEngineConfig.EngineConfigID = EngineConfig.EngineConfigID
JOIN EngineBase
ON EngineConfig.EngineBaseID = EngineBase.EngineBaseID
JOIN EngineDesignation
ON EngineConfig.EngineDesignationID = EngineDesignation.EngineDesignationID
JOIN EngineVIN
ON EngineConfig.EngineVINID = EngineVIN.EngineVINID
JOIN Valves
ON EngineConfig.ValvesID = Valves.Valvesid
JOIN FuelDeliveryConfig
ON EngineConfig.FuelDeliveryConfigID = FuelDeliveryConfig.FuelDeliveryConfigID
JOIN FuelDeliveryType
ON FuelDeliveryConfig.FuelDeliveryTypeID = FuelDeliveryType.FuelDeliveryTypeID
JOIN FuelDeliverySubType
ON FuelDeliveryConfig.FuelDeliverySubTypeID = FuelDeliverySubType.FuelDeliverySubTypeID
JOIN FuelSystemControlType
ON FuelDeliveryConfig.FuelSystemControlTypeID = FuelSystemControlType.FuelSystemControlTypeID
JOIN FuelSystemDesign
ON FuelDeliveryConfig.FuelSystemDesignID = FuelSystemDesign.FuelSystemDesignID
JOIN Aspiration
ON EngineConfig.AspirationID = Aspiration.AspirationID
JOIN CylinderHeadType
ON EngineConfig.CylinderHeadTypeID = CylinderHeadType.CylinderHeadTypeID
JOIN FuelType
ON EngineConfig.FuelTypeID = FuelType.FuelTypeID
JOIN IgnitionSystemType
ON EngineConfig.IgnitionSystemTypeID = IgnitionSystemType.IgnitionSystemTypeID
JOIN Mfr EngineMfr
ON EngineConfig.EngineMfrID = EngineMfr.MfrID
JOIN EngineVersion
ON EngineConfig.EngineVersionID = EngineVersion.EngineVersionID
JOIN PowerOutput
ON EngineConfig.PowerOutputId = PowerOutput.PowerOutputId
JOIN VehicleToSpringTypeConfig
ON Vehicle.VehicleID = VehicleToSpringTypeConfig.VehicleID
JOIN SpringType
ON VehicleToSpringTypeConfig.SpringTypeConfigID = SpringType.SpringTypeID
JOIN VehicleToSteeringConfig
ON Vehicle.VehicleID = VehicleToSteeringConfig.VehicleID
JOIN SteeringConfig
ON VehicleToSteeringConfig.SteeringConfigID = SteeringConfig.SteeringConfigID
JOIN SteeringType
ON SteeringConfig.SteeringConfigID = SteeringType.SteeringTypeID
JOIN SteeringSystem
ON SteeringConfig.SteeringSystemID = SteeringSystem.SteeringSystemID
JOIN VehicleToTransmission
ON Vehicle.VehicleID = VehicleToTransmission.VehicleID
JOIN Transmission
ON VehicleToTransmission.TransmissionID = Transmission.TransmissionID
JOIN TransmissionBase
ON Transmission.TransmissionBaseID = TransmissionBase.TransmissionBaseID
JOIN TransmissionType
ON TransmissionBase.TransmissionTypeID = TransmissionType.TransmissionTypeID
JOIN TransmissionNumSpeeds
ON TransmissionBase.TransmissionNumSpeedsID = TransmissionNumSpeeds.TransmissionNumSpeedsID
JOIN TransmissionControlType
ON TransmissionBase.TransmissionControlTypeID = TransmissionControlType.TransmissionControlTypeID
JOIN ElecControlled TransElecControlled
ON Transmission.TransmissionElecControlledID = TransElecControlled.ElecControlledID
JOIN Mfr TransmissionMfr
ON Transmission.TransmissionMfrID = TransmissionMfr.MfrID
JOIN TransmissionMfrCode
ON Transmission.TransmissionMfrCodeID = TransmissionMfrCode.TransmissionMfrCodeID
JOIN VehicleToWheelbase
ON Vehicle.VehicleID = VehicleToWheelbase.VehicleID
JOIN WheelBase
ON VehicleToWheelbase.WheelbaseID = WheelBase.WheelBaseID
JOIN Positions
ON IAN.position_id = Positions.PositionID
然后,在看了这个之后,我试着看看我可以把什么变成预查询汇总表——其中大多数是基于车辆id的。因此,我通过子组件(如车身、制动器、发动机、变速器等)创建了几个连接,并提出了
SELECT STRAIGHT_JOIN
IAN.sku,
IAN.notes,
Parts.partterminologyname,
PQBaseVehicle.YearID,
PQBaseVehicle.MakeName,
PQBaseVehicle.modelname,
PQBaseVehicle.VehicleTypeName,
PQBaseVehicle.VehicleTypeGroupName,
PQVTrans.TransmissionTypeName,
PQVTrans.TransmissionNumSpeeds,
PQVTrans.ElecControlled,
PQVTrans.MfrName,
PQVTrans.TransmissionMfrCode,
PQEngine.Engine,
PQEngine.Liter,
PQEngine.CC,
PQEngine.CID,
PQEngine.Cylinders,
PQEngine.BlockType,
PQEngine.EngBoreIn,
PQEngine.EngBoreMetric,
PQEngine.EngStrokeIn,
PQEngine.EngStrokeMetric,
PQEngine.EngineDesignationName,
PQEngine.EngineVINName,
PQEngine.ValvesPerEngine,
PQEngine.FuelDeliveryTypeName,
PQEngine.FuelDeliverySubTypeName,
PQEngine.FuelSystemControlTypeName,
PQEngine.FuelSystemDesignName,
PQEngine.AspirationName,
PQEngine.CylinderHeadTypeName,
PQEngine.FuelTypeName,
PQEngine.IgnitionSystemTypeName,
PQEngine.MfrName,
PQEngine.EngineVersion,
PQEngine.HorsePower,
PQEngine.KilowattPower,
PQBrakes.FrontBrakeTypeName,
PQBrakes.RearBrakeTypeName,
PQBrakes.BrakeSystemName,
PQBrakes.BrakeABSName,
PQBody.BodyNumDoors,
PQBody.BodyTypeName,
PQBeds.BedLength,
PQBeds.BedLengthMetric,
PQBeds.BedTypeName,
PQSteering.SteeringTypeName,
PQSteering.SteeringSystemName,
Submodel.SubmodelName,
Positions.position,
DriveType.DriveTypeName,
SpringType.SpringTypeName,
WheelBase.WheelBase,
WheelBase.WheelBaseMetric
FROM
Import_AcesApplication_New IAN
JOIN Parts
ON IAN.part_type_id = Parts.PartTerminologyID
JOIN Positions
ON IAN.position_id = Positions.PositionID
JOIN ( select STRAIGHT_JOIN
BaseVehicle.BaseVehicleID,
BaseVehicle.YearID,
Make.MakeName,
Model.modelname,
VehicleType.VehicleTypeName,
VehicleTypeGroup.VehicleTypeGroupName
from
BaseVehicle
JOIN Make
ON BaseVehicle.MakeID = Make.MakeID
JOIN Model
ON BaseVehicle.ModelID = Model.ModelID
JOIN VehicleType
ON Model.VehicleTypeID = VehicleType.VehicleTypeID
JOIN VehicleTypeGroup
ON VehicleType.VehicleTypeGroupId = VehicleTypeGroup.VehicleTypeGroupId ) PQBaseVehicle
ON IAN.base_vehicle_id = PQBaseVehicle.BaseVehicleID
JOIN Vehicle
ON IAN.base_vehicle_id = Vehicle.BaseVehicleID
JOIN Submodel
ON Vehicle.SubmodelID = Submodel.SubmodelID
JOIN VehicleToWheelbase
ON Vehicle.VehicleID = VehicleToWheelbase.VehicleID
JOIN WheelBase
ON VehicleToWheelbase.WheelbaseID = WheelBase.WheelBaseID
JOIN VehicleToDriveType
ON Vehicle.VehicleID = VehicleToDriveType.VehicleID
JOIN DriveType
ON VehicleToDriveType.DriveTypeID = DriveType.DriveTypeID
JOIN VehicleToSpringTypeConfig
ON Vehicle.VehicleID = VehicleToSpringTypeConfig.VehicleID
JOIN SpringType
ON VehicleToSpringTypeConfig.SpringTypeConfigID = SpringType.SpringTypeID
JOIN ( SELECT STRAIGHT_JOIN
VSC.VehicleID,
ST.SteeringTypeName,
SS.SteeringSystemName
FROM
VehicleToSteeringConfig VSC
JOIN SteeringConfig SC
ON VSC.SteeringConfigID = SC.SteeringConfigID
JOIN SteeringType ST
ON SC.SteeringConfigID = ST.SteeringTypeID
JOIN SteeringSystem SS
ON SC.SteeringSystemID = SS.SteeringSystemID ) PQSteering
ON Vehicle.VehicleID = PQSteering.VehicleID
JOIN ( SELECT STRAIGHT_JOIN
VBC.VehicleID,
BL.BedLength,
BL.BedLengthMetric,
BT.BedTypeName
FROM
VehicleToBedConfig VBC
ON Vehicle.VehicleID = VBC.VehicleID
JOIN BedConfig BC
ON VBC.BedConfigID = BC.BedConfigID
JOIN BedLength BL
ON BC.BedLengthID = BL.BedLengthID
JOIN BedType BT
ON BC.BedTypeID = BT.BedTypeID ) PQBeds
ON Vehicle.VehicleID = PQBeds.VehicleID
JOIN ( SELECT STRAIGHT_JOIN
VBSC.VehicleID,
BND.BodyNumDoors,
BT.BodyTypeName
FROM
VehicleToBodyStyleConfig VBSC
JOIN BodyStyleConfig BSC
ON VBSC.BodyStyleConfigID = BSC.BodyStyleConfigID
JOIN BodyNumDoors BND
ON BSC.BodyNumDoorsID = BND.BodyNumDoorsID
JOIN BodyType BT
ON BSC.BodyTypeID = BT.BodyTypeID ) PQBody
ON Vehicle.VehicleID = PQBody.VehicleID
JOIN ( SELECT STRAIGHT_JOIN
VBC.VehicleID,
FBT.BrakeTypeName FrontBrakeTypeName,
RBT.BrakeTypeName RearBrakeTypeName,
BS.BrakeSystemName,
BrakeABS.BrakeABSName
FROM
VehicleToBrakeConfig VBC
JOIN BrakeConfig BC
ON VBC.BrakeConfigID = BC.BrakeConfigID
JOIN BrakeType FBT
ON BC.FrontBrakeTypeID = FBT.BrakeTypeID
JOIN BrakeType RBT
ON BC.RearBrakeTypeID = RBT.BrakeTypeID
JOIN BrakeSystem BS
ON BC.BrakeSystemID = BS.BrakeSystemID
JOIN BrakeABS
ON BC.BrakeABSID = BrakeABS.BrakeABSID ) PQBrakes
ON Vehicle.VehicleID = PQBrakes.VehicleID
JOIN ( select STRAIGHT_JOIN
VEC.VehicleID,
CONCAT(EB.Cylinders, ' Cyl ', EB.Liter, 'L') as engine,
EB.Liter,
EB.CC,
EB.CID,
EB.Cylinders,
EB.BlockType,
EB.EngBoreIn,
EB.EngBoreMetric,
EB.EngStrokeIn,
EB.EngStrokeMetric,
ED.EngineDesignationName,
EVIN.EngineVINName,
V.ValvesPerEngine,
FDT.FuelDeliveryTypeName,
FDST.FuelDeliverySubTypeName,
FSCT.FuelSystemControlTypeName,
FSD.FuelSystemDesignName,
Asp.AspirationName,
CHT.CylinderHeadTypeName,
FT.FuelTypeName,
IST.IgnitionSystemTypeName,
EMFR.MfrName,
EVer.EngineVersion,
PO.HorsePower,
PO.KilowattPower
from
VehicleToEngineConfig VEC
JOIN EngineConfig EC
ON VEC.EngineConfigID = EC.EngineConfigID
JOIN EngineBase EB
ON EC.EngineBaseID = EB.EngineBaseID
JOIN EngineDesignation ED
ON EC.EngineDesignationID = ED.EngineDesignationID
JOIN EngineVIN EVIN
ON EC.EngineVINID = EVIN.EngineVINID
JOIN Valves V
ON EC.ValvesID = V.Valvesid
JOIN FuelDeliveryConfig FDC
ON EC.FuelDeliveryConfigID = FDC.FuelDeliveryConfigID
JOIN FuelDeliveryType FDT
ON FDC.FuelDeliveryTypeID = FDT.FuelDeliveryTypeID
JOIN FuelDeliverySubType FDST
ON FDC.FuelDeliverySubTypeID = FDST.FuelDeliverySubTypeID
JOIN FuelSystemControlType FSCT
ON FDC.FuelSystemControlTypeID = FSCT.FuelSystemControlTypeID
JOIN FuelSystemDesign FSD
ON FDC.FuelSystemDesignID = FSD.FuelSystemDesignID
JOIN Aspiration Asp
ON EC.AspirationID = Asp.AspirationID
JOIN CylinderHeadType CHT
ON EC.CylinderHeadTypeID = CHT.CylinderHeadTypeID
JOIN FuelType FT
ON EC.FuelTypeID = FT.FuelTypeID
JOIN IgnitionSystemType IST
ON EC.IgnitionSystemTypeID = IST.IgnitionSystemTypeID
JOIN Mfr EMFR
ON EC.EngineMfrID = EMFR.MfrID
JOIN EngineVersion EVer
ON EC.EngineVersionID = EVer.EngineVersionID
JOIN PowerOutput PO
ON EC.PowerOutputId = PO.PowerOutputId ) PQEngine
ON Vehicle.VehicleID = PQEngine.VehicleID
JOIN ( select STRAIGHT_JOIN
VTM.VehicleID,
TT.TransmissionTypeName,
TNS.TransmissionNumSpeeds,
TEC.ElecControlled,
Mfr.MfrName,
TMC.TransmissionMfrCode
from
VehicleToTransmission VTM
JOIN Transmission T
ON VTM.TransmissionID = T.TransmissionID
JOIN TransmissionBase TB
ON T.TransmissionBaseID = TB.TransmissionBaseID
JOIN TransmissionType TT
ON TB.TransmissionTypeID = TT.TransmissionTypeID
JOIN TransmissionNumSpeeds TNS
ON TB.TransmissionNumSpeedsID = TNS.TransmissionNumSpeedsID
JOIN TransmissionControlType TCT
ON TB.TransmissionControlTypeID = TCT.TransmissionControlTypeID
JOIN ElecControlled TEC
ON T.TransmissionElecControlledID = TEC.ElecControlledID
JOIN Mfr
ON T.TransmissionMfrID = Mfr.MfrID
JOIN TransmissionMfrCode TMC
ON T.TransmissionMfrCodeID = TMC.TransmissionMfrCodeID ) PQVTrans
ON Vehicle.VehicleID = PQVTrans.VehicleID
现在,对于GRIN,根据每个预查询各自的优点进行预测试,以确保它们工作正常,并请注意每个查询返回的条目数。我们可能需要执行一个修改后的查询,以获得每辆车的计数,以查看笛卡尔结果可能存在的位置,并占用您的服务器内存。对于子查询,我还缩短了表名以缩短可读性
PQBaseVehicle
PQVTrans
PQEngine
PQBrakes
PQBody
PQBeds
PQSteering
例如,PQSteering,仅运行此部件
我今晚出去了,明天会去看一些人,看看我是否能帮上忙。几十个表上有索引吗?你有60个连接尝试将查询分解为更简单的查询。STRAIGHT_JOIN告诉mysql不要尝试优化连接顺序,而要使用你在查询中指定的顺序,但您指定的顺序似乎主要是字母顺序。尽管如此,它可能不会有太大的变化,但只有在您确信优化器不会做得更好的情况下,才应该使用直接连接而不是连接。尝试将其拆分为更简单的查询。。。当我需要运行复杂的查询时,我将问题分解到中间的临时表中,只显示最终结果。这是一种分而治之的策略,多次挽救了我的生命。不,在哪里,你真的想在RAM中加载所有数据库以获得什么结果?我添加了一个WHERE'WHERE BaseVehicle.BaseVehicleID=2938',并收到:总计258880,查询耗时0.1388秒。我已经按照最初的指示添加了您的封面索引,我相信这很有帮助。@BrianSchroeter,我可以理解为什么您可能正在关闭服务器。你有超过7350万张唱片。。。从相应的查找表中获取所有描述,而不计算索引、连接等在内存中所需的内容。。。我会尝试对我的两个查询进行抽样,但只对一个车型年进行抽样,看看是否至少能在不阻塞服务器的情况下运行。@BrianSchroeter,另外,根据您的基本车辆测试,尝试从Import_AcesApplication_New IAN中选择一个简单的计数*,其中IAN.base_vehicle_id=2938,看看这是否与您的25880匹配。。。如果没有,那么您也会对笛卡尔结果产生疑问,从而使输出的大小相乘。
SELECT STRAIGHT_JOIN
VSC.VehicleID,
ST.SteeringTypeName,
SS.SteeringSystemName
FROM
VehicleToSteeringConfig VSC
JOIN SteeringConfig SC
ON VSC.SteeringConfigID = SC.SteeringConfigID
JOIN SteeringType ST
ON SC.SteeringConfigID = ST.SteeringTypeID
JOIN SteeringSystem SS
ON SC.SteeringSystemID = SS.SteeringSystemID