MySQL - 保持 View 时查询速度慢

标签 mysql sql

在 MySQL 中,我在 2 个表之间进行了简单的连接。有点像

select a.id, SUM(b.qty) from a inner join b on a.id=b.id
where a.id=12345
group by a.id

它作为查询正常运行。但是当我保持查询时

select a.id, SUM(b.qty) from a inner join b on a.id=b.id
group by a.id

在名为 view_ab 的 View 中,当我在 View 上运行以下查询时,该 View 会花费大量时间。

select * from view_ab where id = 12345

这两个表都是大表。无法弄清楚性能下降的原因。请帮助解决此性能问题

编辑: 这是查看SQL

CREATE VIEW view_ab AS SELECT 
r.drid            AS drid,
SUM(s.return_qty) AS return_qty
FROM tbl_deliveryroute r INNER JOIN tbl_deliveryroute_sku s ON r.drid = 
s.drid GROUP BY r.drid;

这是查询

SELECT 
r.drid            AS drid,
SUM(s.return_qty) AS return_qty
FROM tbl_deliveryroute r INNER JOIN tbl_deliveryroute_sku s ON r.drid = 
s.drid WHERE r.drid=12718651
GROUP BY r.drid;

这是对VIEW的查询

SELECT * FROM view_ab WHERE drid=12718651;

View 的执行计划

EXPLAIN EXTENDED SELECT * FROM view_ab WHERE drid=12718651;

编号 选择类型 table 分区 类型 可能的键 key key 长度 引用 行 过滤 额外的

1 基本的 (无效的) 引用 4个 常数 10 100.00 (空)

2 衍生的 秒 (无效的) 全部 idx_tbl_deliverroute_sku_drid (无效的) (无效的) (无效的) 15060913 100.00 使用临时;使用文件排序

2 衍生的 r (无效的) eq_ref 主要,FK_tbl_deliveryroute_1 基本的 4个 humdemotest.s.drid 1个 100.00 使用索引

EXPLAIN EXTENDED  SELECT 
r.drid            AS drid,
SUM(s.return_qty) AS return_qty
FROM tbl_deliveryroute r INNER JOIN tbl_deliveryroute_sku s ON r.drid = 
s.drid WHERE r.drid=12718651
GROUP BY r.drid;

编号 选择类型 table 分区 类型 可能的键 key key 长度 引用 行 过滤 额外的

1 简单的 r (无效的) 常数 基本的 基本的 4个 常数 1个 100.00 使用索引

1 简单的 秒 (无效的) 引用 idx_tbl_deliverroute_sku_drid idx_tbl_deliverroute_sku_drid 4个 常数 22 100.00 (空)

最佳答案

据我所知,您甚至不需要连接,因为您正在处理来自 A-B 的同一键列上的连接,该键已经存在于表 B 中,只需按该键查询组即可。此外,我会在您的 DeliveryRoute_SKU 的路线 ID 列上创建一个索引

SELECT 
      s.drid,
      sum( s.return_qty ) Return_Qty
   from
      tbl_DeliveryRoute_Sku s
   where
      s.drID = 12718651
   group by
      s.drID;

因为你只做键和求和,你甚至不需要另一个表。现在,如果您需要第一个表中除键之外的其他列,那么是的,您需要连接。您甚至可以进一步简化步骤,因为您只查询一个 key ID

SELECT 
      sum( s.return_qty ) Return_Qty
   from
      tbl_DeliveryRoute_Sku s
   where
      s.drID = 12718651;

关于MySQL - 保持 View 时查询速度慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52350836/

相关文章:

sql:如何改进这条语句

mysql - 使用 group by 返回且具有 > 1 的任何记录的查询日期

MySQL 选择自上一次发生一个月中的某一天以来的所有行

php - Mysql 统计用户、状态和今天的日期

phpMyAdmin sql 面板正在将字符串插入为列

c# - 根据数据库表列值禁用gridview行

用于嵌套左连接的 C# Linq 表达式

mysql - 列数不断变化的动态创建语句的存储过程

mysql - MySQL中的存储过程

mysql - 如何在 MySQL 表中查找列的大小