mysql - 如何在 Mysql 中优化我的代码?

标签 mysql sql

我有三个表,名为t_asset、t_device 和t_asset_devicet_assett_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/

相关文章:

与 MySQL 连接的 Java 应用程序死机

sql - 从 PHP 到 Microsoft SQL SERVER 执行存储过程的问题

mysql - 从 sql 表字段填充下拉列表

c# - 使用c#更新MySql上auto_increment ID列的值

mysql - MySQL 中的自动终止/超时慢查询

MySQL SELECT 两张表

mysql - 你如何插入一个类似于SQL语句的列名?在 MySQL 中

mysql - 如果 EXPLAIN 仅显示 400 行,为什么 MySQL SELECT 查询需要 1-2 分钟才能运行?

php - 单击按钮从数据库中获取行的 ID

PHP PDO 更新多条记录而不是一条记录