我有三个表,名为t_asset、t_device 和t_asset_device
。t_asset
和t_device
之间的关系是多对。每个表列是:
t_asset :id , asset_name,asset_code,create_time,creator
t_device:id, device_name,device_code,latitude,longitude,create_time,creator
t_assets_device:id,asset_id,device_id,create_time,creator
现在我想获取第一个设备的所有t_asset和经纬度,所以我写了这样的代码和功能:
fun_getLatitudeByAssetId(`assetId` varchar(50)){
BEGIN
declare v_latituede DECIMAL(10,5) DEFAULT(-1) ;
select latitude into v_latituede
from t_device tDevice
inner join t_assets_device tAssetsDevice
on tAssetsDevice.asset_id=assetId and
tDevice.id=tAssetsDevice.device_id
and tDevice.latitude!=-1
ORDER BY tDevice.id desc
limit 0,1;
return v_latituede;
END
}
fun_getLongititueByAssetId(`assetId` varchar(50)){
BEGIN
declare v_longititue DECIMAL(10,5) DEFAULT(-1) ;
select longititueinto v_longititue
from t_device tDevice
inner join t_assets_device tAssetsDevice
on tAssetsDevice.asset_id=assetId and
tDevice.id=tAssetsDevice.device_id
and tDevice.latitude!=-1
ORDER BY tDevice.id desc
limit 0,1;
return v_longititue ;
END
}
最终查询sql为:
select tAsset.*,fun_getLatitudeByAssetId(tAsset.id) latitude,
fun_getLongititueByAssetId(tAsset.id) longititue from t_asset tAsset
好像查询了两次纬度和经度,如果我想从t_device中获取另一个字段,我不想再写一个函数 像 fun_getDeviceCodeByAssetId,如何优化我的代码?
最佳答案
我认为函数或过程不是可行的方法 - 为什么不只定义一个具有 asset_id 和您想要的所有其他字段的 View ?然后只需在 asset_id 上加入它而不是调用函数。除了更简洁之外,我还关心行的性能而不是函数方法的集合处理(这完全是猜测,我对 MySQL 的了解不够深入,不知道它是如何处理的)
关于mysql - 如何在 Mysql 中优化我的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50701393/